当你使用 inet_pton
函数时,可以将一个点分十进制的 IPv4 或 IPv6 地址转换为二进制格式。下面是一个简单的 C 代码例子,演示了如何使用 inet_pton
函数:
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
int main() {
const char* ipv4Address = "192.168.0.1";
const char* ipv6Address = "2001:0db8:85a3:0000:0000:8a2e:0370:7334";
struct in_addr addr4;
struct in6_addr addr6;
// 将 IPv4 地址转换为二进制格式
if (inet_pton(AF_INET, ipv4Address, &addr4) <= 0) {
perror("Invalid IPv4 address");
return 1;
}
// 将 IPv6 地址转换为二进制格式
if (inet_pton(AF_INET6, ipv6Address, &addr6) <= 0) {
perror("Invalid IPv6 address");
return 1;
}
printf("IPv4 address in binary format: %08x\n", addr4.s_addr);
printf("IPv6 address in binary format: ");
for (int i = 0; i < sizeof(addr6.s6_addr); ++i) {
printf("%02x", addr6.s6_addr[i]);
}
return 0;
}
在此示例中,我们首先定义了一个 IPv4 地址和一个 IPv6 地址作为输入。然后,我们创建了适当类型的结构体 in_addr
和 in6_addr
来存储转换后的二进制地址。
接下来,我们使用 inet_pton
函数分别将 IPv4 地址和 IPv6 地址转换为二进制格式。如果转换失败,则会输出错误消息并返回。
最后,我们打印出转换后的二进制地址。对于 IPv4 地址,我们可以通过 addr4.s_addr
访问,它是一个 32 位无符号整数。对于 IPv6 地址,我们需要逐个字节打印出来。
请注意,在运行此代码时,请确保在编译命令中包含 -lsocket -lnsl
这两个选项以链接所需的库。
内容由零声教学AI助手提供,问题来源于学员提问