内存大小端
嵌入式快充:内存大小端
一、大小端概念
目前大多数计算机中,存储的基本单元是一个字节,对应着8位长度,当存储8位以上的单元,比如:字(16位)、双字(32位)时,他们是拆分成8位进行存储的,因为存储空间是一个连续的地址,如果我们要存储一个16进制的数,他可以分为高8位字节和低8位字节数据,如果高8位字节的数据放在高地址,低位8位数据放在低地址,为小端存储,相反如果高8位数据放在低地址,低8位数据放在高地址,则为大端存储,具体可以由下图表示:
二、使用C判断当前机器大小端
使用C语言判断大小端,我们可以先定义一个16位的已知数据,使用一个char指针强制指向已知数据的地址(指向的是低地址),然后我们以16进制打印指针指向地址的数据
#include <stdio.h>
int main(void)
{
unsigned short u16;
unsigned char* u8;
u16 = 0x1234;
u8 = (unsigned char*)&u16;
printf("%x",*u8);
return 0;
}
运行后结果如下
可以看到打印的是0x34,对应的是0x1234的低地址数据,所以当前计算机的存储方式为小端存储