被这两件东西搞了很久,曾经看资料时理解了,但过一段分间又很容易忘记了。今天遇到一道题,要写个程序检查所用的系统是big endian还是little endian。首先,要知道什么是big endian,什么是little endian?一些资料的解释如下:
字节排序 | 含义 |
Big-Endian | 一个Word中的高位的Byte放在内存中这个Word区域的低地址处。 |
Little-Endian | 一个Word中的低位的Byte放在内存中这个Word区域的低地址处。 |
我觉得这样很不适合记忆,很快就混淆了。用big endian对应值高位优先,little endian对应低位优先,更容易记忆些。计算机在使用内存时总是从低地址向高地址扩展的,所谓值高位优先就是把要存储的数值的高位放在内存的低位,低位优先就是把值的低位放在内存的低位。例如要把十六进制表示的数值0x3132存储到地址为0x00080开始的内存里,在big endian和little endian分布如下:
big-endian | little-endian | |
0x00080 | 0x31(高位优先) | 0x32(低位优先) |
0x00081 | 0x32 | 0x31 |
有了以上的知识,要做上面的题目就容易了。我的做法如下:
unsigned short int x = 0x3132;
char h, l;
h = *(char *)&x;
l = *(char *)((char *)&x + 1);
if(h == 0x31 && l == 0x32)
printf("big endian!n");
else if(h == 0x32 && l == 0x31)
printf("little endian!n");
当然,也还有其它做法,不用同时检查两个字节也行,就只检查低位内存其实已经足够的了。 [@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7406370/viewspace-978125/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7406370/viewspace-978125/