数据在内存中的存储是有先后顺序问题的,存储顺序由计算机硬件决定,根据存储顺序可以分为小端存储模式和大端存储模式,即大小端字节序。
小端字节序
以字节为单位,将数据的低位存放在低地址处,将高位存放在高地址处。如int类型的16进制数0x11223344,以小端字节序方式存储时,在内存中地址由低到高显示为44 33 22 11
大端字节序
以字节为单位,将数据的低位存放在高地址处,将高位存放在低地址处。如int类型的16进制数0x11223344,以大端字节序方式存储时,在内存中地址由低到高显示为11 22 33 44
如何判断当前机器采用的是小端字节序还是大端字节序呢?以int类型的1为例,如果当前机器采用小端,通过解引用访问第一个字节空间的数据将为1;如果当前机器采用大端,通过解引用访问第一个字节空间的数据将为0。下面我们编写一个程序来判断当前机器的字节序。
#include <stdio.h>
int main()
{
int n = 1;
if (*(char*)&n)
printf("小端\n");
else
printf("大端\n");
return 0;
}
将int类型变量n的地址强转为char*类型后,解引用时只能访问变量n第一个字节的空间,机器采用小端字节序时解引用拿到1;机器采用大端字节序时解引用拿到0。