大端 Be (big endiant)
高字节放到低地址上
小端 Le (little endiant)
低字节放到低地址上
判断方法:
思路:
如图:
1.我们知道内存读取是从低地址开始往高地址读,int类型会读4个字节,我们可以通过截取第一个字节来判断是大端还是小端
2.那我们如何截取呢?
1)不同的类型所占内存不同,可以通过类型强转来”截取“第一个字节
2)联合体也是不同的类型共用同一块内存,因此也可以”截取“第一个字节
代码块:
1.利用联合体判断
void sysIsBeOrLe() {
union u1 {
char a;
int b;
}U;
U.b = 1;
// b为int型占四个字节,而a为char占一个字节
// 在共用内存的情况下,a的值可以判断b在内存中的存储方式
if (U.a == 1) {
printf("小端");
} else {
printf("大端");
}
}
2.利用类型强转判断
void sysIsBeOrLe() {
int a = 1;
// &a得到一个int型指针,此时告诉计算机指针指向的地址后读4个字节来读取数据
// 强转成char *后,告诉计算机指针指向的地址后读1个字节来读取数据
// 因此完成了截取,得到了第一个字节的数据
char ch = *(char *)&a;
if (ch == 1) {
printf("小端");
} else {
printf("大端");
}
}