原文分享:
[这里写链接内容] (https://blog.csdn.net/a1414345/article/details/52156766)
检测大小端的方式:
以下是我对代码的理解
代码1:
int check()
{
union
{
char c;
int i;
}un;
un.i=1;
return un.c;
}
void main()
{
if(check()==1)
cout<<"小端"<<endl;
else
cout<<"大端"<<endl;
}
分析如下:假设我们的系统是小端模式:
此时我们输出c的值就相当于只取4个字节中的第一个字节,此时得到的结果就为1,但若系统是大端模式,得到的结果就为0。下同。
代码2:
int check()
{
int i=1;
i=*(char*)&i;//int占4个字节,强转称char型,如果是小端,1就会存储在低地址的第一个字节,
//若为大端,1会存储在高位置的第一个字节,强制取出来的低地址的数就不为1
return i;
}
void main()
{
if(check()==1)
cout<<"小端"<<endl;
else
cout<<"大端"<<endl;
}
代码3:
int check()
{
union
{
char a[4];
int i;
}un;
un.i=1;
for(int i=0;i<4;++i)
cout<<(int)un.a[i]<<" ";
cout<<endl;
return un.a[0];
}
void main()
{
if(check()==1)
cout<<"小端"<<endl;
else
cout<<"大端"<<endl;
}
代码3:
#include <stdio.h>
int check()
{
union UN
{
char a [4];
int i ;
} un ;
un .i = 1;
//02 是整数不够2位就补上0 x是以16进制输出 hhx 表示只输出两位
printf ("%02hhx %02hhx %02hhx %02hhx\n", un .a [0], un. a [1],un . a[2], un .a [3]);
return un . a[0];
}
int main(void)
{
if(check()==1)
printf("小端\n");
else
printf("大端\n");
return 0;
}