【问题标题】:Should I worry about Big Endianness or is it only a trivial aspect?我应该担心 Big Endianness 还是只是一个微不足道的方面?
【发布时间】:2012-03-08 15:20:54
【问题描述】:

是否有很多计算机使用 Big Endian?我刚刚在 5 台不同的计算机上进行了测试,每台计算机都是在不同年份和不同型号中购买的。每次使用Little Endian。 Big Endian 现在是否仍在使用,还是用于摩托罗拉 6800 等较旧的处理器?

编辑:

谢谢 TreyA,intel.com/design/intarch/papers/endian.pdf 是一篇非常好用的文章。它涵盖了下面的所有答案,并对其进行了扩展。

【问题讨论】:

  • 如果您在进行任何类型的网络编程,您肯定需要担心它,因为网络字节顺序是 BE。假设整个世界都和你一样,尽管无论如何都是自找麻烦。
  • 这有点过时了(2004 年什么时候变老了?)但有一些很好的信息:intel.com/design/intarch/papers/endian.pdf
  • ARM、PowerPC、Alpha、SPARC V9、MIPS、PA-RISC 和 IA-64 是维基百科文章中列出的示例。在我的工作中,我必须处理所有这些问题,有些比较少一些。
  • @PlasmaHH 这些是 bi-endian,而不是“大”(意味着可切换的字节序)
  • @TamásSzelei:所以?这是否意味着他们永远不会在大端模式下运行,他也不必担心?

标签: c++ endianness processors


【解决方案1】:

当今使用的许多处理器都是大端或允许在大端和小端之间切换端模式的选项(例如 SPARC、PowerPC、ARM、Itanium..)。

这取决于您所说的“关心字节序”是什么意思。如果您只是对所需的数据进行编程,通常不需要特别关心字节序。当您需要与外界通信时,Endian 很重要,例如读/写文件,或通过网络发送数据,您可以通过直接在内存中读取/写入大于 1 字节的整数来实现。

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

因此,它不是特别针对处理器字节序,而是您需要处理的数据。该数据可能具有存储在“endian”中的整数,您需要知道哪个以及各种数据格式将使用各种字节序,具体取决于某些规范,或者取决于提出该格式的人的心血来潮。

【讨论】:

    【解决方案2】:

    就不同的架构而言,到目前为止,大端仍然是最常用的。其实在Intel和老的DEC电脑之外,我不知道小端:Sparc、Power PC(IBM Unix机器)、HP的Unix平台、IBM大型机等都是大端。但这有关系吗?唯一一次我不得不考虑字节序是在实现一些低级系统例程时,比如modf。否则int是一定范围内的整数值,仅此而已。

    【讨论】:

      【解决方案3】:

      以下常见平台使用大端编码:

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

      x86/x64 CPU 是 little-endian。如果您要在两者之间处理二进制数据,您一定要注意这一点。

      【讨论】:

        【解决方案4】:

        这更像是评论而不是答案,但我不能发表评论,我认为这是一篇很棒的文章,值得一读。

        这是 Danny Cohen 于 1980 年撰写的关于字节顺序的经典著作: ON HOLY WARS AND A PLEA FOR PEACE

        【讨论】:

          【解决方案5】:

          这个问题没有足够的上下文。一般来说,您应该随时注意它,但您不需要在日常编码中强调它。如果您打算弄乱整数的内部字节,请开始担心字节顺序。如果您打算对整数进行标准数学运算,请不要担心。

          endianness 出现的两大地方是网络(大端标准)和二进制记录(必须研究整数是存储大端还是小端)。

          【讨论】:

            猜你喜欢
            • 2020-06-25
            • 2012-02-19
            • 2010-09-23
            • 2023-03-19
            • 1970-01-01
            • 1970-01-01
            • 2019-07-07
            • 2012-06-20
            • 2014-05-26
            相关资源
            最近更新 更多