字节序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节序相关的知识,希望对你有一定的参考价值。
字节序是说整型数字在内存地址中存储的顺序,分为大端字节序、小端字节序两种:
* 大端字节序: 最高有效位存储于最低地址位,最低有效位存储于高地址位,既存储顺序与所见顺序相同
* 小端字节序: 最高有效位存储于最高地址位,最低有效位存储于最低地址位
字节序的运用分为主机字节序和网络字节序:
* 主机字节序: 根据主机类型不同字节序也就不同,我们常用的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
顺序和介绍的字节序顺序相同
以上是关于字节序的主要内容,如果未能解决你的问题,请参考以下文章