1,定义
小端存储:
低位字节存放在内存的低地址端,高位字节存放在内存的高地址端。
小端存储:
高位字节 存放在内存的低地址端,低位字节存放在内存的高地址端
2,举例
例如一个16进制的数据 0x12345678 在内存中的存储方式:
地址 | 小端存储 | 大端存储 |
---|---|---|
0x0001 | 0x78 | 0x12 |
0x0002 | 0x56 | 0x34 |
0x0003 | 0x34 | 0x56 |
0x0004 | 0x12 | 0x78 |
3,存在原因
因为内存是按照字节进行存储数据的。那么对于一字节的数据,不存在存储的顺序问题。而对于多字节的数据,则存在存储的顺序问题。
4,测试代码
代码解释:
a为int型数据,内存占用四个字节。那么如果为小端存储,当char型指针指向变量a的地址时,取出的数据应该是最低一个字节的数据。
int main()
{
int a = 0x12345678;
char* ptr = (char*)&a;
printf("sizeof a: %d\n", sizeof(a));
if (1 == *ptr)
{
printf("小端存储: %p, %p, 0x%x\n", &a, ptr, *ptr);
}
else
{
printf("大端存储: %p, %p, 0x%x\n", &a, ptr, *ptr);
}
return 0;
}
执行结果如下: