C++中inet_pton、inet_ntop函数

876 阅读1分钟
  • 头文件

windows下:

#include <WS2tcpip.h>

linux下:

#include <sys/socket.h>

#include <netinet/in.h>

#include<arpa/inet.h>

  • inet_pton函数

将点分十进制串转换成网络字节序二进制值,此函数对IPv4地址和IPv6地址都能处理。

第一个参数可以是AF_INET或AF_INET6:

第二个参数是一个指向点分十进制串的指针:

第三个参数是一个指向转换后的网络字节序的二进制值的指针。

  • inet_ntop函数

和inet_pton函数正好相反,inet_ntop函数是将网络字节序二进制值转换成点分十进制串。

第一个参数可以是AF_INET或AF_INET6:

第二个参数是一个指向网络字节序的二进制值的指针;

第三个参数是一个指向转换后的点分十进制串的指针;

第四个参数是目标的大小,以免函数溢出其调用者的缓冲区。

  • 样例

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> int main (void) { char IPdotdec[20]; //存放点分十进制IP地址 struct in_addr s; // IPv4地址结构体 // 输入IP地址 printf("Please input IP address: "); scanf("%s", IPdotdec); // 转换 inet_pton(AF_INET, IPdotdec, (void *)&s); printf("inet_pton: 0x%x\n", s.s_addr); // 注意得到的字节序 // 反转换 inet_ntop(AF_INET, (void *)&s, IPdotdec, 16); printf("inet_ntop: %s\n", IPdotdec); }