如何判断big-endian还是little-endian?

结合这一篇http://blog.csdn.net/linygood/article/details/6872926中提到的关于CPU内型的判断,以及自己看到的一个联合体实例分析一下

#include <stdio.h>
int main()
{      
union{                                                      
     int i;      
     struct{                                           
        char first;      
        char second;      
      }half;      
 }number;      
number.i=0x4241;       
printf("%c%c\n", number.half.first,   number.half.second);      
number.half.first='a';                        
number.half.second='b';      
printf("%x\n", number.i);      
}


这里需要对union的存储方式和CPU字节序要有所了解。numbe.i=0x4241,对于little-endian实际在内存中存储方式为:

低地址:  0x4241

高地址: 0x0000

而union的所有成员都是从低地址开始存放。因此number.half.first=0x41, number.half.second=0x42,所以输出:AB

而number.half.first='a'; number.half.second='b';之后内存如下:

低地址: 0x6261

高地址: 0x0000

所以number.i=0x0000 6261

输出:6261

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值