【问题标题】:Are there any advantages to network byte order in a new protocol?新协议中的网络字节顺序有什么优势吗?
【发布时间】:2018-01-17 15:18:13
【问题描述】:

(我知道很多人会很想结束这个问题;请不要这样做;我正在寻求具体的技术答案,如果有的话。)

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

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

【问题讨论】:

    标签: endianness cbor


    【解决方案1】:

    归结为人为因素:如果先用最高有效字节编码,则在十六进制转储中读取多字节整数会更容易。例如,CBOR 0x1234 (4,660) 的表示形式是字节序列 19 12 34。如果您正在寻找 0x1234 的值,则更容易找到它。

    TLDR;

    我已经在这个领域工作了 40 多年,所以这背后有很多历史。多年来,甚至“字节”的定义也发生了变化,因此可能需要一点开放的心态来理解它是如何演变的。

    二进制信息的转储并不总是以字节为单位,也不是十六进制的。例如,PDP-11(具有 16 位字和 8 位字节)使用八进制表示法字宽转储很常见。这很有用,因为机器架构包含 8 个寄存器和 8 种寻址模式,因此八进制的机器语言转储比十六进制更容易解码。

    【讨论】:

    • 我认为使用 CBOR(或任何其他二进制协议)的人通常不会通过读取原始十六进制来对其进行解码,因此这似乎不是一个很好的理由来要求几乎所有计算机世界要做两个毫无意义的字节顺序交换。
    • 你错过了我的意思。您问是否有为新协议选择大端序的任何技术原因。我说是的,但这与协议解码器的操作方式无关,它与人类有关因素。这种人为因素仍然是相当技术性的,并且与采用新协议时所需的人类活动有关。
    • 也许您认为字节交换会导致性能下降。这曾经也困扰着我,但随着处理器变得越来越快,它对我的​​困扰越来越少。在这一点上,如果 CBOR 是 little-endian 而不是 big-endian,如果您能够有意义地测量任何显着的应用程序级性能差异,我会感到惊讶。通常,将字节输入/输出系统的速度将决定实际性能,而不是像字节交换这样的内部处理器级工作。
    • 36 可以被 4 位整除。也许您的意思是“按 8 位”?
    • @Burt_Harris 36 可以被 4 位整除,但 PDP-10 确实使用了例如 18 位半字,而这些半字不是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多