字节序
一.字节序理解
字节序其实就是数据在内存中的存储方式,因为内存的地址用高低位之分,数据也有高低位,所以按照存放的顺序一般可分为大端字节序,和小段字节序。
生活中我们放东西的顺序也是不一样的,有的人习惯性的将自己的物品放在自己的左手边,有的人就习惯性的放在自己的右手边,那对于电脑来说,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处理器的,验证为小端序存储