据我研究,Little Endian 将最低有效字节存储在最小的内存地址中,而 Big Endian 将最高有效字节存储在最小的内存地址中。
但是,我不明白如何计算和比较有效字节。
例如,从这个地点,下图显示了90,AB,12,CD这4个字节在Little Endian格式的内存地址中是如何存储的。
如何比较这 4 个字节中哪个字节较大?我首先将所有字节转换为十六进制值,然后根据其十进制值进行比较,但这种方法似乎不起作用。
205 > 18,但是 CD 存储在最小的内存地址中..所以..我错了。
如有任何澄清,我们将不胜感激。
Treating CD as a hex value, with a decimal value of 205.
Treating 12 as a hex value, with a decimal value of 18.
Treating AB as a hex value, with a decimal value of 171.
Treating 90 as a hex value, with a decimal value of 144.
答案1
我认为您链接到的网页包含非常令人困惑的字节顺序描述!
字中各个字节的实际值与它们在内存中的存储位置无关,只与它们作为整个 4 字节字的一部分的位置有关。
字节顺序仅适用于多字节字。在您的例子中,您有一个 4 字节字,如下所示:
Decimal Hex Binary
2427130573 90 AB 12 CD 10010000 10101011 00010010 11001101
这是大端表示法,其中最高有效字节(0x90
)首先存储在内存中,或者存储在最低的内存地址中。
在小端表示中,字节在内存中只是简单地反转,如下所示:
Decimal Hex Binary
2427130573 CD 12 AB 90 11001101 00010010 10101011 10010000
现在,最低有效字节(0xCD
)首先存储在内存中,或者存储在最低的内存地址中。
您会发现,所涉及的字节的实际值并不决定它们在内存中的位置,而只决定它们在整个字中的位置。
字节顺序的概念可以追溯到 CPU 架构,正如您链接的文章中所述,这两种方法都有优点和缺点。
人类思考数字的最自然方式是大端序,因为这是我们处理十进制数的方式。 在您的例子中,十进制数2427130573
可以说是以大端序表示法书写的,即2
首先写入最高有效位 ( ),其重要性随着向右而减小(即更改最左边数字的值对数字的值具有最大重要性)。 数字也可以从左到右书写,也可以首先写入3750317242
最低有效位,只要您知道如何读取它即可(编辑:顺便说一下,这就是为什么 unicode 文件应该在文件的前 2 个字节中存储字节顺序标记 (BOM),以便操作系统知道如何解释文件。)
但是,对于计算机来说,最有效的方法是先存储最低有效字节。我认为大端字节序与小端字节序的争论是另一个讨论的主题,网上有很多这方面的资料!
我希望这有助于澄清一些问题!