判断大小端的方法
#include
/*1. 利用不同的数据类型占用空间不同*/
int main()
{
short int x;
char y,z;
x = 0x1122;
y = ((char *)&x)[0]; //低地址
z = ((char *)&x)[1]; //高地址
printf("y=%x ",y);
printf("z=%x ",z);
if (y == 0x11)
{
printf("little endian ");
}
else if (z == 0x22)
{
printf("big endian ");
}
return 0;
}
/*2.利用指针赋值比较/
typedef unsigned char BYTE;
int main(int argc, char* argv[])
{
unsigned int n,*p;
p = &n;
n = 0;
*(BYTE *)p = 0xff;
if (n == 0xff)
{
printf("The endian of cpu is little ");
}
else
{
printf("The endian of cpu is big ");
}
return 0;
}
/*3.利用指针取值时不同类型读取字节数不一样*/
#include
int main()
{
int x = 0x1;
char *p = (char *)&x;
if (*p)
{
printf("little ");
}
else
{
printf("large ");
} return 0;
}
/*4.利用union判断大小端*/
int checkCPU()
{
{union w
{
int a;
char b;
} c;
c.a = 1;
return (c.b == 1);
}
}