1:大小端字节序
参考博文:大小端模式
2:存储字节序和传输字节序
存储字节序:一个多字节的变量在内存中的存储方式,变量的小端数据存储在内存起始位置是小端字节序;变量的大端数据存储在内存起始位置是大端字节序;
传输字节序:协议传输多字节变量时的传输方式,先传输大端字节的方式成为大端字节序;先传输小端字节的方式成为小端字节;网络协议使用大端字节序传输数据,USB协议使用小端字节序传输协议;
两者关系:由于系统主机存在大小端模式,并且不能保证网络通信的两个主机之间的存储字节序一致,所以网络协议就规定自身在传输数据的时候使用的字节序为大端字节序,这样网络通信的双方主机就会达成一致,对接收到的数据(大端模式)依据自身的存储字节序来进行处理;存储字节序和传输字节序本质上是一样的概念;
3:字节序转换函数
#include <netinet/in.h>
uint16_t htons(uint16_t host16bitvalue) //返回网络字节序的值
uint32_t htonl(uint32_t host32bitvalue) //返回网络字节序的值
uint16_t ntohs(uint16_t net16bitvalue) //返回主机字节序的值
uint32_t ntohl(uint32_t net32bitvalue) //返回主机字节序的值
上述函数中,h代表host,n代表network,s代表short,l代表short;
当使用这些函数时,我们并不关心主机字节序和网络字节序的真实值,只要调用适当的函数在主机和网络字节序之间转换某个给定的值,因为在那些与网