我应该担心大结局,还是只是一个微不足道的方面

Should I worry about Big Endianness or is it only a trivial aspect?

本文关键字:一个 微不足道 方面 担心 结局 我应该      更新时间:2023-10-16

有很多计算机使用Big Endian吗?我刚刚在5台不同的电脑上进行了测试,每台电脑都是在不同的年份购买的,型号也不同。每个人都用小恩迪亚。Big Endian现在还在使用吗?还是用于摩托罗拉6800等旧处理器?

编辑:

感谢TreeA,intel.com/design/intach/papers/endian.pdf是一篇非常好用的文章。它涵盖了下面的每一个答案,并对它们进行了扩展。

目前使用的许多处理器都是大端序处理器,或者允许在大端序和小端序之间切换端序模式(例如SPARC、PowerPC、ARM、Itanium..)。

这取决于你所说的"关心endian"是什么意思。如果您只对所需的数据进行编程,通常不需要特别关心endianes。当你需要与外部世界通信时,比如读/写文件,或者通过网络发送数据时,Endian很重要,你可以通过直接向内存读/写大于1字节的整数来实现这一点。

当你确实需要处理外部数据时,你需要知道它的格式。其格式的一部分是例如知道整数是如何在该数据中编码的。如果格式指定一个4字节整数的第一个字节是该整数的最高有效字节,那么您可以读取该字节并将其放在程序中该整数的最有效字节处,就可以完成此操作使用在小端和大端机器上运行的代码。

因此,与其说它是关于处理器端序的,不如说它是你需要处理的数据。这些数据可能有整数存储在"endian"中,你需要知道是哪个,各种数据格式将使用各种endianes,这取决于某些规范,或者取决于提出格式的人的突发奇想。

就不同的体系结构而言,大端序仍然是迄今为止使用最多的。事实上,除了Intel和旧的DEC计算机之外,我不知道有什么小的endian:Sparc、Power PC(IBM Unix机器)、HP的Unix平台、IBM大型机等都是big endian。但这有关系吗?我唯一一次考虑endianness是在实现一些低级系统例程时,比如modf。否则,int是某个范围内的整数值,仅此而已。

以下常见平台使用big-endian编码:

  • Java
  • TCP/UDP数据包中的网络数据(甚至可能在IP级别,但我不确定)

x86/x64 CPU是小端序。如果您要在二者之间使用二进制数据进行接口,那么您绝对应该意识到这一点。

这与其说是一个答案,不如说是一篇评论,但我不能发表评论,我认为这是一篇很好的文章,值得一读。

这是Danny Cohen关于endianness的经典作品,可追溯到1980年:关于HOLY WARS和和平的PLEA

这个问题没有足够的上下文。一般来说,您应该始终意识到这一点,但在日常编码中不需要过于强调它。如果您打算扰乱整数的内部字节,请开始担心端序性。如果你打算对整数进行标准数学运算,不要担心

endianness弹出的两个主要地方是网络(big-endian标准)和二进制记录(必须研究整数是存储big-endia还是存储little-endian)。