1. 强制转换
给定 int类型的变量a,赋值为1,1的16进制为:00 00 00 01。
若小端存储则a中存储为:01 00 00 00。
大端存储为:00 00 00 01。
则可以取出a的地址强转为char*类型,*(char*)&a来判断值为0/1。
如果是0则为大端存储,是1为小端存储。
代码实现如下:
int main()
{
int a = 1;
//00 00 00 01
if (*(char*)&a == 1)
printf("小端存储\n");
else
printf("大端存储\n");
return 0;
}
2. 利用共用体
如图:
我们可以发现a,b的地址是相同的,那么对于b的改变,则也会改变a。因为b占有四个字节,而a则只有一个字节。
如果是小端存储则c中为1,
相反如果是大端存储则c中为0。
代码实现如下:
typedef union A
{
char a;
int b;
}A;
int main()
{
A a;
a.b = 1;
if (a.a == 1)
printf("小端存储\n");
else
printf("大端存储\n");
}