ITPub博客

首页 > 应用开发 > IT综合 > little-endian VS. big-endian

little-endian VS. big-endian

原创 IT综合 作者:longtrue 时间:2007-10-23 10:36:52 0 删除 编辑

被这两件东西搞了很久,曾经看资料时理解了,但过一段分间又很容易忘记了。今天遇到一道题,要写个程序检查所用的系统是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 endianlittle 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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 初识零知识证明
下一篇: 博客搬家啊
请登录后发表评论 登录
全部评论
  • 博文量
    30
  • 访问量
    864268