nt inet_pton(int af, const char *src, void *dst); 举例
时间: 2024-12-15 08:22:53 浏览: 5
详解inet_pton()和inet_ntop()函数
5星 · 资源好评率100%
`inet_pton` 函数是网络编程中一个非常重要的函数,它用于将人类可读的IP地址字符串转换成网络字节顺序(通常称为点分十进制形式)的二进制表示。这个函数在头文件 `<netinet/in.h>` 中定义,其中 `af` 参数指定了地址家族,如 AF_INET 对于IPv4,AF_INET6 对于IPv6。
函数原型大致如下:
```c
int inet_pton(int af, const char *src, void *dst);
```
这里的参数解释如下:
- `af`: 地址族常量,例如 `AF_INET` 表示 IPv4,`AF_INET6` 表示 IPv6。
- `src`: 指向待转换的IP地址字符串,比如 "192.168.1.1" 或 "[::1]"。
- `dst`: 指针指向存放转换结果的目标缓冲区,函数会将转换后的二进制数据写入此处。
举个例子:
```c
#include <arpa/inet.h>
#include <stdio.h>
int main() {
char ip_str[INET6_ADDRSTRLEN]; // 存放IPv4或IPv6的字符串
struct in_addr ip_v4; // IPv4地址结构体
struct in6_addr ip_v6; // IPv6地址结构体
// 将IPv4地址 "192.168.1.1" 转换为二进制
if (inet_pton(AF_INET, "192.168.1.1", &ip_v4) == 1) {
printf("IPv4 address: %s\n", inet_ntoa(ip_v4));
} else {
printf("Invalid IPv4 address.\n");
}
// 尝试将IPv6地址 "[::1]" 转换,如果输入无效,返回0
if (inet_pton(AF_INET6, "::1", &ip_v6)) {
printf("IPv6 address: [%.*s]\n", sizeof(ip_v6), ip_v6.sin6_addr.s6_zero);
} else {
printf("Invalid IPv6 address.\n");
}
return 0;
}
```
在这个例子中,`inet_ntoa()` 函数用于将 `ip_v4` 结构体转换回人类可读的字符串格式。
阅读全文