大小端这个问题在面试过程中偶尔会被问到,这里笔者总结了一下,提出了两个小程序进行判断,欢迎大伙
查看指教
第一种:联合(union)方式判断法
在union中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同
的起始地址。即上述的union虽然定义了两个成员,但其实这个union只占用了4个字节(32位机器中),往a成员
赋值,然后读取b就相读取a成员的低位第一个字节的值。如果机器使用大端模式,则u.a=1那a的最高字节值为1;
如果机器使用小段模式,则u.a=1则a的最低位字节为1。上述可知b和a有相同的起始位,所以读取b如果等于1,
则为小端模式,b为0则为大端模式
typedef union {
int i;
char c;
}my_union;
int checkSystem1(void)
{
my_union u;
u.i = 1;
return (u.i == u.c);
}
int checkSystem2(void)
{
int i = 0x12345678;
char *c = &i;
return ((c[0] == 0x78) && (c[1] == 0x56) && (c[2] == 0x34) && (c[3] == 0x12));
}
int main(void)
{
if(checkSystem1())
printf("little endian\n");
else
printf("big endian\n");
if(checkSystem2())
printf("little endian\n");
else
printf("big endian\n");
return 0;
}
如果返回1表示小端,反则表示大端;