我们知道整形在内存中的存储方式了,但是在VS编译器里发现好像顺序不一样,类如:
这里就涉及到大小端字节序存储了。
什么是大端小端
大端存储模式:是指数据的低位保存在内存的高地址中,数据的高位,保存在内存的低地址中。
小端存储模式:是只数据的低位保存在内存的低地址中,数据的高位,保存在内存的高地址中。
什么是数据的低位高位?
为了方便理解:
像十进制数字 478 ,低位就是最右边,在内存中存储的二进制也是这样
如何判断大小端
我们知道内存中每一个字节都有属于自己的地址,存储了一个数据之后,只要取出第一个字节的地址看看是数据的低位还是高位就可以判断了。写一个程序就是:
int main()
{
int a = 1;
char* p = (char*)&a;
if (*p == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
}
为什么要用 int 再类型转换,因为如果是 char ,它只有一个字节的地址无法判断。
类型转换之后解引用就是取出的第一个字节了
如果是小端存储的话就是这样取出的,大端就相反: