新协议中的网络字节顺序是否有任何优势?

时间:2018-01-17 15:18:13

标签: endianness cbor

(我知道很多人都会想要关闭这个问题;请不要;我要求具体的技术答案,如果有的话。)

"网络字节顺序" cannot be asked on stackoverflow的原因是大端的。许多旧协议使用该命令并且无法更改,但我想知道是否有任何技术原因可以为新协议选择大端。

我认为小端更好,因为99.99%的处理器使用的是小端(ARM在技术上可以做到这两种,但实际上它总是设置为小端)。所以我很惊讶地看到CBOR是一个相对较新的协议,使用大端。有没有我没想过的优势?

1 个答案:

答案 0 :(得分:0)

归结为人为因素:如果首先使用最高有效字节进行编码,则更容易读取十六进制转储中的多字节整数。例如,CBOR 0x1234(4,660)的表示是字节序列19 12 34.如果要查找值0x1234,则更容易以这种方式发现它。

TLDR;

我已经在这个领域工作了40多年,所以这背后有很多历史。即使是“字节”的定义在这么多年里也发生了变化,所以这可能需要一些开放的思想来理解它是如何演变的。

二进制信息的转储并不总是以字节为单位,也不是十六进制。例如,PDP-10机器架构(在互联网早期很大)使用了36位字。由于36位不能被4位均匀分割,但可以被3位整除,八进制八进制(基数8表示法)通常用于将内存内容转储到打印机。

甚至PDP-11(具有16位字和8位字节)使用八进制表示字全范围转储也很常见。然而,对于其他计算机体系结构,八进制的有用性下降,并且十六进制转储变得普遍,但即使这样,一次性倾倒单词(16或32位)而不是字节通常需要小内核机器,而大端机器可以只是转储字节并让人类将它们组合在一起(没有字节交换)。