Bootstrap

C语言之大小端

字节序

一.字节序理解

字节序其实就是数据在内存中的存储方式,因为内存的地址用高低位之分,数据也有高低位,所以按照存放的顺序一般可分为大端字节序,和小段字节序。

生活中我们放东西的顺序也是不一样的,有的人习惯性的将自己的物品放在自己的左手边,有的人就习惯性的放在自己的右手边,那对于电脑来说,cpu的不同,内存存储多字节数据的存储方式也相应的不同。

主机字节序

不同类型CPU主机中,内存存储多字节整数的方法不同,称为主机字节序

主机序列有两种
小端序 :数据的低字节存放在内存的低地址
大端序 :数据的高字节存放在内存的低地址

一般 inter处理器的字节序为 小端序, 而 ARM 架构的处理器多为大端序

验证主机字节序

方法一:用共用体

#include <stdio.h>

//定义一个共用体
union Data
{
	int a;
	char b;
};

int main()
{
	union Data data;
	data.a = 0x12345678; //注意12为数据的高位
	//小端序
	if (0x78 == data.b)
	{
		printf("the little end sequence\r\n");
	}
	//大端序
	else
	{
		printf("the big end sequence\r\n");
	}
	return 0;
}

方法二:用指针

#include <stdio.h>

int main()
{
   //定义一个有三个元素的指针数组
	int a =0x12345678; //0x12为数据的高位,0x78为数据的地位
   char* p = (char*)&a; //*p 访问的是低地址
   if(*p == 0x12)
   {
      printf("主机为大端序\n");
   }
   else
   {
      printf("主机为小端序\n");
   }
   return 0;
}

编程结果

inter处理器

运行代码的电脑是inter处理器的,验证为小端序存储

;