为什么分大小端
大小端是机器处理多个字节的不同方式。在计算机中,存储单位是字节,也就是byte。每个字节是8bit。但是C语言中数据类型并不仅有单字节类型,还有多字节的类型,比如int型数据一般占4个字节。那么多个字节在内存中是怎么存放的呢?这就是大端,小端两种不同的方式。我们PC机上用的一般都是小端模式。
什么是大小端
大端:数据的高位存在内存的低地址,数据的低位存在内存的高地址;
小端:数据的高位存在内存的高地址,数据的低位存在内存的低地址;
举个栗子,对于int型数据0x12345678,大小端存放不一样,详见下图。
大端:
小端:
判断大小端的方式
①指针强转,int* 转为char*,读取首个字节的数据,小端在低地址会存放低位01,大端则存放高位00。
#include <stdio.h>
#include <string.h>
int main() {
int a = 1;
int* p = &a;
if (*(char *)p == 1)
printf("小端");
else
printf("大端");
return 0;
}
结果:
②借助共用体。共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
#include <stdio.h>
#include <string.h>
int main() {
union data{
int x;
char y;
};
union data a;
a.x = 1;
if (a.y == 1) {
printf("小端\n");
}
else {
printf("大端\n");
}
return 0;
}
结果: