字节序经常被分为两类:
- Big-Endian(大端):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
- Little-Endian(小端):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
验证原理
计算机处理字节序的时候,不知道什么是高位字节,什么是低位字节。它只知道按顺序读取字节,先读第一个字节,再读第二个字节。
如果是大端字节序,先读到的就是高位字节,后读到的就是低位字节。小端字节序正好相反。
程序
有两种验证方法:
- 读取16进制数高低位,按照16进制数的高低位输出顺序判断;
- 利用联合体union中所有成员共用一块内存,对整块内存赋值,分块取出。
方法一:
void check_cpu()
{
int a = 0x1234;
char *p = (char *)&a;
if(*p == 0x34)
printf("Little-Endian\n");
else if(*p == 0x12)
printf("Big-Endian\n");
else
printf("unknow\n");
}
方法二:
void check_cpu()
{
union{
short value;
char byte[2];
}num;
num.value = 0x1234;
if(num.byte[0] == 0x34 && num.byte[1] == 0x12)
printf("Little Endian\n");
else if(num.byte[0] == 0x12 && num.byte[1] == 0x34)
printf("Big Endian\n");
else
printf("unkonw\n");
}
通常,主机字节序一般是小端字节序,网络字节序一般是大端字节序。