网络字节序和主机字节序之间的转换

使用标准库函数: 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;
}
  1. 使用操作系统提供的函数:
    • Windows:WSAhtons()WSAhtonl()WSAntohs()WSAntohl()。需要包含 <winsock2.h> 头文件并在程序初始化时调用 WSAStartup() 进行套接字库的初始化。
    • Linux/UNIX:htons()htonl()ntohs()ntohl()。需要包含 <netinet/in.h> 头文件。

请注意,将数据从主机字节序转换为网络字节序时使用htons()htonl()函数,而将数据从网络字节序转换为主机字节序时使用ntohs()ntohl()函数。

确保在进行字节序转换之前,数据的类型与这些函数所期望的类型匹配,以避免可能的错误。

posted @ 2023-07-14 17:22  朴实小码哥  阅读(203)  评论(0编辑  收藏  举报