<aside> 💡 字节序:顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序
</aside>
字节序分为大端字节序(Big-Endian) 和小端字节序(Little-Endian)
字节序举例
小端字节序
大端字节序
当格式化的数据在两台使用不同字节序的主机之间直接传递时,接收端会错误地对其进行解释
解决问题的方法是:
<aside> 💡 网络字节顺序是 TCP/IP 中规定好的一种数据表示格式,它与具体的 CPU 类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释
</aside>
BSD Socket提供了封装好的转换接口,方便程序员使用
htons
、htonl
ntohs
、ntohl
/*
h - host 主机,主机字节序
to - 转换成什么
n - network 网络字节序
s - short, unsigned short, 一般用于转换端口
l - long, unsigned int, 一般用于转换IP
*/
#include <arpa/inet.h>
// 转换端口
uint16_t htons(uint16_t hostshort); // 主机字节序 - 网络字节序
uint16_t ntohs(uint16_t netshort); // 主机字节序 - 网络字节序
// 转IP
uint32_t htonl(uint32_t hostlong); // 主机字节序 - 网络字节序
uint32_t ntohl(uint32_t netlong); // 主机字节序 - 网络字节序