|
针对第一个问题,有这样的解释:
考虑一个W位的整数。它的各位表达如下:[Xw-1, Xw-2, ... , X1, X0], MSB (Most Significant Byte, 最高有效字节)为 [Xw-1, Xw-2, ... Xw-8];
LSB和MSB谁位于内存的最低地址, 即谁代表该对象的地址? 这就引出了大端(Big Endian)与小端(Little Endian)的问题。
Linux系统中,你可以在/usr/include/中(包括子目录)查找字符串BYTE_ORDER(或_BYTE_ORDER, __BYTE_ORDER),确定其值。BYTE_ORDER中文称为字节序。这个值一般在endian.h或machine/endian.h文件中可以找到,有时在feature.h中,不同的操作系统可能有所不同。 对于一个数0x1122
经一网友指正,才知道,上面的描述,是不准确的. 想了下,觉得如下描述可能更合适: 使用Little Endian方式存储数据时,数据的LSB相对最没意义的数据位,存放在低地址位置,这里的LSB也就是22了.也即,低地址存储0x22, 高地址存储0x11 而使用Big Endian方式存储数据时,数据的MSB最有意义的数据位,存放在低地址位置,这里的MSB也就是11了.也即,低地址存储0x11, 高地址存储0x22
助记: 1)所谓MSB (Most Significant Byte),名字很复杂,不知是否有人没搞懂,反正我开始看到这个词时候,就很糊涂,有点不完全理解.其实简单说MSB就是,一个数字中,最重要的那位, 举例来说,12004,中文读作,一万两千零四,那最高位的1,就表示了一万,此处就称作MSB,最有意义的位. 2)一般常见的数据存储,用文字写出来的时候,其内容书写格式,多数是从低地址到高地址. 举例,一个16进制数是 0x11 22 33, 而存放的位置是 地址0x3000 中存放11 地址0x3001 中存放22 地址0x3002 中存放33 连起来就写成地址0x3000-0x3002中存放了数据0x112233. 而这种存放和表示方式,正好符合大端. 解释的有点乱,希望有人能看懂.
如果还有哪里有误,还请各位继续指正.谢谢.
【用函数判断系统是Big Endian还是Little Endian】 }//IsBig_Endian()
文章转自 http://hi.baidu.com/serial_story/blog/item/7e110587c3ed8e29c75cc3c7.html |
本文详细介绍了Byte Order(字节序)的概念,包括大端(Big Endian)与小端(Little Endian)的区别,以及如何在不同操作系统和处理器上识别它们。通过具体的例子和代码片段帮助读者更好地理解字节序在内存中的组织方式。

1854

被折叠的 条评论
为什么被折叠?



