little-endian VS. big-endian

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

转载于:http://blog.itpub.net/7406370/viewspace-978125/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值