大端模式、小端模式
“大端”和”小端”表示多字节值的哪一端存储在该值的起始地址处。
大端字节序(Big
Endian):最高有效位(第一字节)存于最低内存地址处,最低有效位存于最高内存处; (空间向大地址处增长)
小端字节序(Little
Endian):最高有效位(第一字节)存于最高内存地址,最低有效位存于最低内存处。(空间向小地址处增长)
测试机器是大端字节序还是小端字节序
#include
union
{
char ch;
int i;
}un;
int main(void)
{
un.i = 0x12345678;
if(un.ch == 0x12)
{
printf("big endian\n");
}
else
{
printf("small endain\n");
}
return 0;
}
原理:union型数据所占的空间等于其最大成员类型所占的空间。
对union型成员的存取都是相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问不论对哪个变量的存取都是从union的首地址开始的。通过检测第一个字节存放的数据即可得出结果。