下面是一个判断大小端的 C 代码:
#include <stdio.h>
int main()
{
union {
short s;
char c[sizeof(short)];
} un;
un.s = 0x0102;
if (sizeof(short) == 2) {
if (un.c[0] == 1 && un.c[1] == 2)
printf("big-endian\n");
else if (un.c[0] == 2 && un.c[1] == 1)
printf("little-endian\n");
else
printf("unknown\n");
}
else
printf("sizeof(short) = %d\n", sizeof(short));
return 0;
}
这段代码利用了联合体的特性,将一个 short 类型的变量赋值为 0x0102,然后通过访问联合体中的 char 数组来判断大小端。
如果 short 类型占 2 个字节,则代码会判断 un.c[0] 和 un.c[1] 的值是否分别为 1 和 2,如果是,则表示为大端;如果 un.c[0] 和 un.c[1] 的值分别为 2 和 1,则表示为小端。
如果 short 类型占不到 2 个字节,则代码会输出 short 类型占用的字节数。
希望这段代码能帮到你!