字节序有大端字节序
与小端字节序
, 目前 X86、arm、mips 基本都使用小端字节序
。但是在网络数据传输时,使用大端字节序
。
TCP/IP 协议,RFC1700 规定使用 “大端” 字节序为网络字节序,其他不使用大端的计算机要注意了,发送数据的时候必须要将自己的主机字节序转换为网络字节序(即 “大端” 字节序),接收到的数据再转换为自己的主机字节序。这样就与 CPU、操作系统无关了,实现了网络通信的标准化
大小端字节序转换
32bit 字节转换
1 2 3 4 5 6 7 8 9
| #include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
|
64bit 字节转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <endian.h>
uint16_t htobe16(uint16_t host_16bits); uint16_t htole16(uint16_t host_16bits); uint16_t be16toh(uint16_t big_endian_16bits); uint16_t le16toh(uint16_t little_endian_16bits);
uint32_t htobe32(uint32_t host_32bits); uint32_t htole32(uint32_t host_32bits); uint32_t be32toh(uint32_t big_endian_32bits); uint32_t le32toh(uint32_t little_endian_32bits);
uint64_t htobe64(uint64_t host_64bits); uint64_t htole64(uint64_t host_64bits); uint64_t be64toh(uint64_t big_endian_64bits); uint64_t le64toh(uint64_t little_endian_64bits);
|