网络字节序和主机字节序之间的转换
使用标准库函数: htons():将16位整数从主机字节序转换为网络字节序。 htonl():将32位整数从主机字节序转换为网络字节序。 ntohs():将16位整数从网络字节序转换为主机字节序。 ntohl():将32位整数从网络字节序转换为主机字节序。 例子:
#include <iostream>
#include <arpa/inet.h> // Linux下需包含该头文件
int main() {
uint16_t hostShort = 12345;
uint16_t networkShort = htons(hostShort);
uint32_t hostLong = 987654321;
uint32_t networkLong = htonl(hostLong);
std::cout << "Host Short: " << hostShort << std::endl;
std::cout << "Network Short: " << networkShort << std::endl;
std::cout << "Host Long: " << hostLong << std::endl;
std::cout << "Network Long: " << networkLong << std::endl;
return 0;
}
- 使用操作系统提供的函数:
- Windows:
WSAhtons()
,WSAhtonl()
,WSAntohs()
,WSAntohl()
。需要包含<winsock2.h>
头文件并在程序初始化时调用WSAStartup()
进行套接字库的初始化。 - Linux/UNIX:
htons()
,htonl()
,ntohs()
,ntohl()
。需要包含<netinet/in.h>
头文件。
- Windows:
请注意,将数据从主机字节序转换为网络字节序时使用htons()
和htonl()
函数,而将数据从网络字节序转换为主机字节序时使用ntohs()
和ntohl()
函数。
确保在进行字节序转换之前,数据的类型与这些函数所期望的类型匹配,以避免可能的错误。