字节序是说整型数字在内存地址中存储的顺序,分为大端字节序、小端字节序两种:
* 大端字节序: 最高有效位存储于最低地址位,最低有效位存储于高地址位,既存储顺序与所见顺序相同
* 小端字节序: 最高有效位存储于最高地址位,最低有效位存储于最低地址位
字节序的运用分为主机字节序和网络字节序:
* 主机字节序: 根据主机类型不同字节序也就不同,我们常用的x86类型的机器字节序为小端字节序
* 网络字节序: 固定为大端字节序
举个例子,如果我们需要存储一个整型数字,比如0x12345678分别在内存中的顺序如下:
写了个小脚本在测试机测一下结果相同:
#include <stdio.h>
#include <arpa/inet.h>
int main(void)
{
unsigned int a = 0x12345678;
unsigned char *b = (unsigned char *)&a;
printf("%0x %0x %0x %0x\n",b[0],b[1],b[2],b[3]);
unsigned int c = htonl(a); //htonl 是字节序转换函数,转为网络字节序
b = (unsigned char *)&c;
printf("%0x %0x %0x %0x\n",b[0],b[1],b[2],b[3]);
return 0;
}
运行之后打印的结果为:
78 56 34 12
12 34 56 78
顺序和介绍的字节序顺序相同
转载于:https://blog.51cto.com/xiaozhong991/2103470