下面的程序提供了两种方法判断处理器字节序:
方法一:指针强制转换
#include <stdio.h>
/* 返回 1 表示小端序,0 表示大端序 */
int is_little_endian(void)
{
int x = 1;
return *(char *)&x == 1;
}
int main(void)
{
if (is_little_endian())
printf("little-endian\n");
else
printf("big-endian\n");
return 0;
}
方法二:利用 union
#include <stdio.h>
/* 返回 1 表示小端序,0 表示大端序 */
int is_little_endian_union(void)
{
union {
int i;
char c[sizeof(int)];
} unx;
unx.i = 1;
return unx.c[0] == 1;
}
int main(void)
{
if (is_little_endian_union())
printf("little-endian\n");
else
printf("big-endian\n");
return 0;
}
什么是大端序/小端序啊? 出处是“爱丽丝梦游仙境”里的鸡蛋的吃法,从小端开始吃还是从大端开始吃,如下图:

参考: wikipedia