IP地址转换

1.字符串转32bit网络字节序

inet_aton函数

int inet_aton(const char *cp, struct in_addr *inp);
cp指向字符串,支持如下格式:
 - a.b.c.d //192.168.9.1 0xC0.0xA8.011.1
 - a.b.c   //192.168.2305
 - a.b     //192.11012353
 - a       //3232237825
无效字符串返回0,不设置errno,成功返回1
inp:为NULL可用于IP地址合法性检测

inet_addr函数

in_addr_t inet_addr(const char *cp);
失败返回INADDR_NONE(0xFFFFFFFF),这就存在一个问题,cp指向255.255.255.255时返回的也是(0xFFFFFFFF),不能够区分出是否出错
其他和inet_aton相同

inet_pton函数

int inet_pton(int af, const char *restrict src, void *restrict dst);
af:支持AF_INET(IPv4)和AF_INET6(IPv6)
src:仅支持点分十进制
dst:为AF_INET时,dst类型为struct in_addr;为AF_INET6时,dst类型为struct in6_addr;不能为NULL
成功返回1 字符串无线返回0 af类型无效返回-1并设置errno(EAFNOSUPPORT)

2.32bit网络字节序转点分十进制

inet_ntoa函数

char *inet_ntoa(struct in_addr in);
函数返回地址指向静态区,注意线程安全问题

inet_ntop函数

const char *inet_ntop(int af, const void *restrict src, char dst[restrict .size], socklen_t size);
af:支持AF_INET(IPv4)和AF_INET6(IPv6)
src:指向待转换的地址
dst:转换后字符串的缓存区,不能为NULL
size:缓存区的大小 IPv4(INET_ADDRSTRLEN 16) IPv6(INET6_ADDRSTRLEN 46)
成功返回返回指向dst的指针 错误返回空并设置errno(可能的错误 EAFNOSUPPORT ENOSPC)
posted @ 2025-08-12 11:49  宏浪  阅读(6)  评论(0)    收藏  举报