这四个函数的头文件都需要头文件:

  1. #include <arpa/inet.h>

htonl() 函数

函数原型为:

  1. uint32_t htonl(uint32_t hostlong);

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图1 函数的功能是:将一个 32 位数从本地字节顺序转换为网络字节顺序。函数 htonl 中的字母含义为:

  • h:host 本地主机
  • to:to 转换
  • n:net 网络
  • l:unsigned long 无符号长类型

所谓网络字节顺序(大尾顺序)就是指一个数在内存中存储的时候 “高对低,低对高”(即一个数的高位字节存放在低地址单元,低位字节存放在高地址单元中),可能有的计算机在存储数据时使用的是大尾顺序,有的计算机使用的是小尾顺序。

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图2 参数:

  • hostlong:主机字节顺序表达的 32 位数,类型为无符号长整形

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图3 返回值:函数的返回值是一个 32 位的网络字节顺序

htons() 函数

函数原型为:

  1. uint16_t htons(uint16_t hostshort);

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图4 函数的功能是:将一个 16 位数从本地字节顺序转换为网络字节顺序。函数 htons 中的字母含义为:

  • h:host 本地主机
  • to:to 转换
  • n:net 网络
  • s:unsigned short 无符号短整型

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图5 参数:

  • hostshort:主机字节顺序表达的 16 位数,类型为无符号短整形

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图6 返回值:函数的返回值是一个 16 位的网络字节顺序

ntohl() 函数

函数原型为:

  1. uint32_t ntohl(uint32_t netlong);

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图7 函数的功能是:将一个 32 位数由网络字节顺序转换为主机字节顺序。函数 ntohl 中的字母含义为:

  • n:net 网络
  • to:to 转换
  • h:host 本地主机
  • l:unsigned long 无符号长类型

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图8 参数:

  • netlong:网络字节顺序表达的 32 位数,类型为无符号长整形

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图9 返回值:函数的返回值是一个 32 位的主机字节顺序

ntohs() 函数

函数原型为:

  1. uint16_t ntohs(uint16_t netshort);

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图10 函数的功能是:将一个 16 位数由网络字节顺序转换为主机字节顺序。函数 ntohs 中的字母含义为:

  • n:net 网络
  • to:to 转换
  • h:host 本地主机
  • s:unsigned short 无符号短整型

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图11 参数:

  • netshort:网络字节顺序表达的 16 位数,类型为无符号短整型

§ Linux网络通信—-htonl()、htons()、ntohl()、ntohs()四个函数 - 图12 返回值:函数的返回值是一个 16 位的主机字节顺序