字节序是说整型数字在内存地址中存储的顺序,分为大端字节序、小端字节序两种:

* 大端字节序: 最高有效位存储于最低地址位,最低有效位存储于高地址位,既存储顺序与所见顺序相同

* 小端字节序: 最高有效位存储于最高地址位,最低有效位存储于最低地址位


字节序的运用分为主机字节序和网络字节序:

* 主机字节序: 根据主机类型不同字节序也就不同,我们常用的x86类型的机器字节序为小端字节序

* 网络字节序: 固定为大端字节序


举个例子,如果我们需要存储一个整型数字,比如0x12345678分别在内存中的顺序如下:

image.png


写了个小脚本在测试机测一下结果相同:

#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

顺序和介绍的字节序顺序相同