0%

字节序

总是记不住大端和小端各是哪些方向……

这回一定要结合实践记住。

首先,字节序表示了字节之间的关系。字节内部是什么顺序,是不会受到影响的。切勿因为一个字节的十六进制表达为2个符号就觉的也需要进行顺序的调整。

拿栗子来说明,12345678H 这个数据,也就是 0x12345678 (H 与 0x 均为16进制表达的标志),也就是十进制的 305,419,896 ‬(列出十进制以避免理解差错)。

如果是按大端存储,假设起始地址为0x00004000,那么有各个地址存储的数据如下表。

地址 0x00004000 0x00004001 0x00004002 0x00004003
数据 12 34 56 78

小端存储则会是相反的顺序。

地址 0x00004000 0x00004001 0x00004002 0x00004003
数据 78 56 34 12

用文字来表达,就是 高位放在低地址是大端。 更切实的记忆方法就是,如果地址从左到右增大,那么按照大端书写,其顺序与原来数据的顺序是相同的。这样去看的话,小端就有些别扭了,尤其如果以32位字为单位存储的数据,小端存储的数据需要你反着读每4个字节。

OK,希望到这里已经让你弄明白了。下面只是一些具体应用与杂七杂八的。

小端序最常见的应用是 x86 的处理器,所以如果你在使用 PC 机,大多数情况下就是在使用小端序。

根据 Wikipedia,大端序的典型应用还有 IBM 的 PowerPC 970 等。另外互联网为了统一数据的格式,统一采用大端序。被称为网络序或者网络字节序。

当时学计组的时候,记得有说 MIPS 是 大端序,但是参考 Wiki 后说 ARM 和 MIPS 都是可配置字节序的,所以这里就不妄言了。