一、 为什么要用inet_pton?
在网络通信中,IP 地址在代码里其实是一个整数(二进制)。
- 人类视角:点分十进制字符串,例如
"192.168.1.1"。 - 机器视角:32位的大端整数,例如
0xC0A80101。
inet_pton的作用就是充当翻译官:它不仅能把字符串转成整数,还能自动处理字节序(直接转为网络大端序),并且同时支持 IPv4 和 IPv6。
注:函数名中的p代表 Presentation(显示/文本),n代表 Network(网络/数值),to代表转换。
二、 函数解剖室
在使用前,我们需要了解它的详细规格:
头文件:
#include<arpa/inet.h>// 这个头文件包含了所有 Socket 核心 API,同时也包含了 sys/socket.h函数原型:
intinet_pton(intaf,constchar*src,void*dst);参数详解:
af(Address Family):协议族。AF_INET:表示 IPv4。AF_INET6:表示 IPv6。
src(Source):传入参数。- 指向包含 IP 地址字符串的指针(例如
"127.0.0.1")。 const修饰,保证函数内部不会修改你的字符串。
- 指向包含 IP 地址字符串的指针(例如
dst(Destination):传出参数。- 指向一块内存区域,用来存放转换后的结果。
- 对于 IPv4,通常指向
struct sockaddr_in结构体中的sin_addr成员。
返回值(重点!需背诵):
1:成功。0:输入格式无效(例如传了"192.168.1.999"这种非法 IP)。-1:协议族af不正确(此时会设置errno错误码)。
三、 代码实战 1:标准 IPv4 转换
我们来看一个最典型的用法:将字符串写入到套接字地址结构体中。
代码 (ipv4_convert.c)
#include<stdio.h>#include<stdlib.h>