目录
大端、小端
大端:高位字节放在内存的低地址端,低位字节放在内存的高地址端,CPU 对操作数的存放方式从高字节到低字节。
小端:低位字节放在内存的低地址端,高位字节放在内存的高地址端,CPU 对操作数的存放方式从低字节到高字节。
假设我们的内存是这样的:
我们要存一个数据 0x44332211 到这块内存里面去如果系统是 小端模式 的话,存储方式如下图:
如果系统是 大端模式 的话,存储方式如下图:
区分方式 1
通过判断内存的低地址是否为 1 来区分大小端:指针类型转换,将长度大的 int 类型转换为长度小的 char 类型,最后再取 char* 指针的值,就知道数据 1 存放在高端地址还是低端地址了。
#include <stdio.h>
int main()
{
int i = 1;
(*(char*)&i == 1) ? printf("Little-endian\n") : printf("Big-endian\n");
return 0;
}
区分方式 2
利用共用体的特点:使用长度最大的那个数据类型作为共用体的大小。所以,char a 使用的是 int b 的空间大小,判断 a 的值,也就是判断低地址的数据值。
#include <stdio.h>
union System {
char a;
int b;
};
int main()
{
union System s;
s.b = 1;
printf("0x%x\n", &s.a);
printf("0x%x\n", &s.b);
if (s.a == 1) {
printf("Little-endian\n");
} else {
printf("Big-endian\n");
}
return 0;
}