“如何判断所用的机器是大端还是小端?”这是一个面试的时候经常被问起的问题。其实很简单,使用联合体就可以轻松判断出来。在写代码之前,只需知道两点,第一,联合体的各个成员都是公用内存的;第二,联合体的成员不管是在哪个架构上默认都是从低地址开始存储的,这点非常重要。下面我们来看代码。
#include <stdio.h>
#include <stdlib.h>
union endian{
char a;
int b;
}test;
int main()
{
test.b = 0x12345678;
printf("0x%x\n", test.a);
}
打印结果:
0x78
所以可以判断我所用的架构是小端的。下面稍微解释一下,test.a是联合体在内存中的第一个字节(也是在内存地址中最低的地址),打印出来了0x78说明数据的逻辑低位存储在了内存地址的低位,这就是小端了。