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处理器的,验证为小端序存储

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值