1、字节序(Byter Order):数据(比特、字节、字)等的存储和传输机制。
2、字节序一般分为:大端字节序(Big-endian)和小端字节序(Litter-endian)。
3、一个数据在各大计算机体系的存储方式不同,因此明白字节序更为重要,那如何区分大端和小端呢?
特点\名称 | 大端 | 小端 |
存储 | 低地址存放高数据,高地址存放低数据。 | 低地址存放低数据,高地址存放高数据。 |
传输 | 高数据放在流的开始,低数据放在流的末尾。 | 低数据放在流的开始,高数据放在流的末尾。 |
举例 | 手机、网络、ARM | PC、Inter |
4、通过画图来更清楚的看一下大端和小端:
5、通过代码来判断我现在使用的笔记本是小端:
方法一:利用联合体
#include<stdio.h>
void Byteorder1()
{
union
{
short value;
char union_bytes[sizeof(short)];
}test;
test.value=0x0102;
if((test.union_bytes[0]==1) && (test.union_bytes[1]==2))//低地址存放高位,高地址存放地位
{
printf("big endian\n");
}
else if((test.union_bytes[0]==2) && (test.union_bytes[1]==1))//低地址存放低位,高地址存放高位。
{
printf("litter endian\n");
}
else
{
printf("unknow\n");
}
}
void main()
{
Byteorder1();
}
方法二:与方法一等价
#include<stdio.h>
bool Byteorder2()
{
union
{
short a;
char b;
}ua;
ua.a=1;
return ua.b;
}
int main()
{
if(Byteorder2())
{
printf("litter endian\n");
}
else
{
printf("big endian\n");
}
}
方法三:(利用强类型转换)
#include<stdio.h>
bool Byteorder3()
{
short a=1;
return *(char *)&a==1;
}
int main()
{
if(Byteorder3())
{
printf("litter endian\n");
}
else
{
printf("big endian\n");
}
}
最终都输出“litter endian”.