1 inet_pton函数
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
-
函数将点分十进制的IP地址转换为网络字节序的二进制值。
-
af 参数指定了地址族,可以是 AF_INET(IPv4)或 AF_INET6(IPv6)
-
src 参数是一个指向以点分十进制表示的IP地址字符串的指针
-
dst 参数是一个指向用于存储转换结果的缓冲区(内存)的指针
-
返回值:
成功: 1 异常: 0, 说明src指向的不是一个有效的ip地址。 失败:-1
2 inet_ntop函数
#include <arpa/inet.h>
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
- 函数将网络字节序的二进制值转换为点分十进制的IP地址
- af 参数指定了地址族,可以是 AF_INET(IPv4)或 AF_INET6(IPv6)
- src 参数是一个指向包含要转换的二进制值的内存块的指针,
- dst 参数是一个指向用于存储转换结果的缓冲区的指针
- size参数指定了缓冲区的大小。
- 返回值:
成功:dst。
失败:NULL
3 例子
#include <stdio.h>
#include <arpa/inet.h>
int main() {
// 将点分十进制的IP地址转换为网络字节序的二进制值
char ip_str[] = "192.168.1.1";
struct in_addr addr;
if (inet_pton(AF_INET, ip_str, &addr) <= 0) {
perror("inet_pton error");
return -1;
}
printf("%s -> %x\n", ip_str, addr.s_addr);
// 将网络字节序的二进制值转换为点分十进制的IP地址
char ip_buf[INET_ADDRSTRLEN];
const char *ret = inet_ntop(AF_INET, &addr, ip_buf, INET_ADDRSTRLEN);
if (ret == NULL) {
perror("inet_ntop error");
return -1;
}
printf("%x -> %s\n", addr.s_addr, ip_buf);
return 0;
}
结果
192.168.1.1 -> 101010c0
101010c0 -> 192.168.1.1