大小端问题
时间:2010-05-06 来源:asteriskchina
举个例子来说名大小端: 比如一个int x, 地址为0x100, 它的值为0x1234567. 则它所占据的0x100, 0x101, 0x102, 0x103地址组织如下图:
一般情况下,x86的cpu为小端,powerpc为大端,怎样用程序判定大小端呢,
利用联合体的特点是最简单的,数据成员共享内存空间。
大端:低位字节存放在高位地址内
小端:高位字节存放在高位地址中
判断方法: #include <stdio.h> int main(void) { union endian_un{ short var; char bits[sizeof(short)]; };
union endian_un flag;
flag.var=0x0102;
if(sizeof(short)==2){ if(flag.bits[0]==1 && flag.bits[1]==2) printf("judged by first method, big-endian\n"); else if(flag.bits[0]==2 && flag.bits[1]==1) printf("judged by first method, little-endian\n"); else printf("cannot determine the type\n"); }
return 0; }

判断方法: #include <stdio.h> int main(void) { union endian_un{ short var; char bits[sizeof(short)]; };
union endian_un flag;
flag.var=0x0102;
if(sizeof(short)==2){ if(flag.bits[0]==1 && flag.bits[1]==2) printf("judged by first method, big-endian\n"); else if(flag.bits[0]==2 && flag.bits[1]==1) printf("judged by first method, little-endian\n"); else printf("cannot determine the type\n"); }
return 0; }
相关阅读 更多 +
排行榜 更多 +