什么是大、小端
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在地址的低地址中。
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在地址的高地址中。
图解
我们知道,在内存中数据的存储及计算都是通过转化为二进制来进行的,为了方便我们直观感受电脑都会转化为16进制来表示出来,如下图:
我们可以看出它是字节为单位来存储的(一个 int 型有4个字节,一个字节八个比特位,4个比特位存储一个十六进制的数)低位的44存在地址:0x00CFFBF0处,高位的11存在0x00CFFBF3处,这就是小端字节序存储。
大、小端存储模式如下图:
如何用代码来测试当前机器的字节序?
假设用 1 来测试,那么写成 16 进制就是 0x00000001,我们假设它是小端字节序存储,那么由之前的分析可以得出,地址由低到高第一个字节存储的应该是01,大端则为00.
由此,我们可以写出如下代码:
#include<stdio.h> int main() { int a = 1; char* p = (char*)&a; //强制类型转换,&a本为int*类型,转为char*型 if (*p == 1) //这样就能解引用访问第一个字节 printf("小端"); else printf("大端"); return 0; }
我们还可以简化一下,如下:
#include<stdio.h> int main() { int a = 1; if (*(char*)&a == 1) //转换完直接解引用 printf("小端"); else printf("大端"); return 0; }
以上便是本期内容了,希望对您有所帮助,如有错误还请大佬指正。