hecangbo
全部博文(67)
Cocos(4)
word(4)
2016年(3)
2013年(5)
2012年(3)
2011年(5)
2010年(35)
2009年(16)
Bsolar
chenjiag
张兵1989
howzy
opencook
ptx0333
scq2099y
deshma
fengkuan
分类: C/C++
2010-12-03 23:30:54
在C语言中,不同于结构体,共用体(联合体)中的几种不同类型的变量存放在同一段内存单元中。利用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是是大端还是小端模式。
#include "stdio.h"int main(){ union w { int a; //4 bytes char b; //1 byte } c; c.a=1; if (c.b==1) printf("It is Little_endian!\n"); else printf("It is Big_endian!\n"); return 1;}说明:1 在c中,联合体(共用体)的数据成员都是从低地址开始存放。2 若是小端模式,由低地址到高地址c.a存放为0x01 00 00 00,c.b被赋值为0x01;
————————————————————————————
地址 0x00000000 0x00000001 0x00000002 0x00000003
c.a 01 00 00 00
c.b 01 00
———————————————————————————— 3 若是大端模式,由低地址到高地址c.a存放为0x00 00 00 01,c.b被赋值为0x0;
c.a 00 00 00 01
c.b 00 00
4 根据c.b的值的情况就可以判断cpu的模式了,现在XP环境下的intel CPU是小端模式,不信你可测试下!
上一篇:堆与栈
下一篇:如何判断CPU是大端还是小端模式
登录 注册