ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
~~~ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int inet_aton(const char *cp, struct in_addr *inp); in_addr_t inet_addr(const char *cp); char *inet_ntoa(struct in_addr in); ~~~ 只能处理IPv4的ip地址 不可重入函数 注意参数是struct in_addr 现在: ~~~ #include <arpa/inet.h> int inet_pton(int af, const char *src, void *dst); const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); ~~~ 支持IPv4和IPv6 可重入函数 其中`inet_pton`和`inet_ntop`不仅可以转换IPv4的`in_addr`,还可以转换IPv6的`in6_addr`。 因此函数接口是`void *addrptr`。 ~~~ #include <arpa/inet.h> #include <stdio.h> int main(int argc, char *argv[]) { unsigned char buf[] = "192.168.3.2"; unsigned int num = 0; //将IPv4和IPv6地址从文本转换为二进制形式 inet_pton(AF_INET, buf, &num); unsigned char *p = (unsigned char *)&num; printf("%d, %d, %d, %d\n", *p, *(p + 1), *(p + 2), *(p + 3)); char ip[16] = ""; //大端的转为点分十进制串 printf("%s\n", inet_ntop(AF_INET, &num, ip, 16)); return 0; } ~~~