<aside> 💡 字节序:顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序

</aside>

字节序分为大端字节序(Big-Endian) 和小端字节序(Little-Endian)

字节序举例

字节序转换函数

当格式化的数据在两台使用不同字节序的主机之间直接传递时,接收端会错误地对其进行解释

解决问题的方法是:

<aside> 💡 网络字节顺序是 TCP/IP 中规定好的一种数据表示格式,它与具体的 CPU 类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释

</aside>

BSD Socket

BSD Socket提供了封装好的转换接口,方便程序员使用

	/* 
	  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);		  // 主机字节序 - 网络字节序