MST

星途 面试题库

面试题:C语言中网络字节序转换函数的使用

在Linux环境下,C语言提供了哪些函数用于网络字节序和主机字节序的转换?请举例说明如何将一个32位的整数从主机字节序转换为网络字节序,并简要解释这些函数的工作原理。
44.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

在Linux环境下,C语言提供了以下函数用于网络字节序和主机字节序的转换:

  1. htonl():将32位整数从主机字节序转换为网络字节序(大端序)。
  2. htons():将16位整数从主机字节序转换为网络字节序(大端序)。
  3. ntohl():将32位整数从网络字节序转换为主机字节序。
  4. ntohs():将16位整数从网络字节序转换为主机字节序。

示例代码将一个32位的整数从主机字节序转换为网络字节序:

#include <stdio.h>
#include <arpa/inet.h>

int main() {
    uint32_t host_num = 0x12345678;
    uint32_t net_num;

    net_num = htonl(host_num);

    printf("Host byte order: 0x%08x\n", host_num);
    printf("Network byte order: 0x%08x\n", net_num);

    return 0;
}

这些函数的工作原理:

  • htonl()htons()
    • 主机字节序可能是大端序(Big - Endian)或小端序(Little - Endian),而网络字节序规定为大端序。
    • htonl() 函数将32位的主机字节序整数,按照网络字节序(大端序)重新排列字节顺序后返回。例如,如果主机是小端序,0x12345678 在内存中存储为 78 56 34 12,经过 htonl() 转换后变为 12 34 56 78
    • htons() 同理,只是针对16位整数。
  • ntohl()ntohs()
    • 作用与上面两个函数相反,将网络字节序(大端序)的整数转换为主机字节序。如果主机是小端序,ntohl() 会将 12 34 56 78 转换回 78 56 34 12