下面这段代码可以用来测试一下你的编译器是大端模式还是小端模式: short int x; char x0,x1; x=0x1122; x0=((char*)&x)[0]; //低地址单元 x1=((char*)&x)[1]; //高地址单元 若x0=0x11,则是大端; 若x0=0x22,则是小端...... 上面的程序还可以看出,数据寻址时,用的是低位字节的地址。
补充三个方法
方法1:
高字节存储在高地址是小端,高字节存储在低地址是大端。
int main()
{
int a = 1;//内存表示为0x00000001.
if(((char*)&a[3] == 1)
printf("big");
else
printf("small");
}
方法二:
联合体union的存放顺序是所有成员都从低地址开始存放
int main()
{
union _test
{
int a;
short b;
}test;
test.a = 0x12345678;
if(test.b == 0x1234)
printf("big");
if(test.b == 0x5678)
printf("small");
}
方法三
typedef unsigned char BYTE; int main(int argc, char* argv[]) { unsigned int num,*p; p = # num = 0; *(BYTE *)p = 0xff; if(num == 0xff) { printf("The endian of cpu is little\n"); } else //num == 0xff000000 { printf("The endian of cpu is big\n"); } return 0; }