inet_ntop, inet_pton 深碍√TFBOYSˉ_ 2022-09-18 11:57 35阅读 0赞 原文地址: [http://blog.csdn.net/chang6520/article/details/7965752][http_blog.csdn.net_chang6520_article_details_7965752] Linux下[inet\_pton][inet_pton]和inet\_ntop这2个IP地址转换函数,可以在将IP地址在“[点分十进制][Link 1]”和“整数”之间转换。而且,这2个函数能够处理ipv4和ipv6。算是比较新的函数了。 inet\_pton函数原型如下\[将“点分十进制” -> “整数”\] \#include <sys/types.h> \#include <sys/socket.h> \#include <arpa/inet.h> int inet\_pton(int af, const char \*src, void \*dst); 这个函数转换字符串到网络地址,第一个参数af是地址族,转换后存在dst中。 inet\_pton 是inet\_addr的扩展,支持的多地址族有下列: af = AF\_INET src为指向字符型的地址,即ASCII的地址的首地址(ddd.ddd.ddd.ddd格式的),函数将该地址 转换为in\_addr的 [结构体][Link 2] ,并复制在\*dst中。 af =AF\_INET6 src若为指向IPV6的地址,函数将该 [地址转换][Link 3] 为in6\_addr的结构体,并复制在\*dst中。 如果函数出错将返回一个负值,并将errno设置为EAFNOSUPPORT,如果参数af指定的地址族和src格式不对,函数将返回0。 inet\_ntop函数原型如下\[将“整数” -> “点分十进制”\] \#include <sys/types.h> \#include <sys/socket.h> \#include <arpa/inet.h> const char \*inet\_ntop(int af, const void \*src, char \*dst, socklen\_t cnt); 这个函数转换网络二进制结构到ASCII类型的地址,参数的作用和上面相同,只是多了一个参数socklen\_t cnt,他是所指向缓存区dst的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空 [指针][Link 4] ,并将errno置为ENOSPC。 下面是例程: \#include <stdio.h> \#include <stdlib.h> \#include <string.h> \#include <unistd.h> \#include <sys/socket.h> \#include <netinet/in.h> int main (void) \{ char IPdotdec\[20\]; //存放点分十进制IP地址 struct in\_addr s; // IPv4地址结构体 // 输入IP地址 printf("Please input IP address: "); scanf("%s", &IPdotdec); // 转换 inet\_pton(AF\_INET, IPdotdec, (void \*)&s); printf("inet\_pton: 0x%x\\n", s.s\_addr); // 注意得到的 [字节序][Link 5] // 反转换 inet\_ntop(AF\_INET, (void \*)&s, IPdotdec, 16); printf("inet\_ntop: %s\\n", IPdotdec); \} 例程2; \#include <stdio.h> \#include <stdlib.h> \#include <netinet/in.h> int main(void) \{ char addr\_p\[16\]; /\*IP地址的点分十进制字符串表示形式\*/ struct in\_addr addr\_n;/\*IP地址的二进制表示形式\*/ if(inet\_pton(AF\_INET,"192.168.11.6",&addr\_n)<0)/\*地址由字符串转换为二级制数\*/ \{ perror("fail to convert"); exit(1); \} printf("address:%x\\n",addr\_n);/\*打印地址的16进制形式\*? if(inet\_ntop(AF\_INET,&addr\_n,addr\_p,(socklen\_t )sizeof(addr\_p))==NULL) /\*地址由二进制数转换为点分十进制\*/ \{ perror("fail to convert"); exit(1); \} printf("address:%s\\n",addr\_p);/\*打印地址的点分十进制形式\*/ return 0; \} 出错检查: inet\_pton函数成功的话返回1,参数无效返回0,错误返回-1; inet\_ntop函数成功的话返回字符串的首地址,错误返回NULL; [http_blog.csdn.net_chang6520_article_details_7965752]: http://blog.csdn.net/chang6520/article/details/7965752 [inet_pton]: http://baike.baidu.com/view/2736603.htm [Link 1]: http://baike.baidu.com/view/828066.htm [Link 2]: http://baike.baidu.com/view/204974.htm [Link 3]: http://baike.baidu.com/view/545723.htm [Link 4]: http://baike.baidu.com/view/159417.htm [Link 5]: http://baike.baidu.com/view/2194385.htm
相关 C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS 错误:C4996: 'inet\_addr': Use inet\_pton() or InetPton() instead or define \_WINSOCK\_DEPR àì夳堔傛蜴生んèń/ 2023年06月05日 12:57/ 0 赞/ 45 阅读
相关 错误 C4996 ‘inet_ntoa‘: Use inet_ntop() or InetNtop() instead or define _WINS 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C4996 'inet\_ntoa': Use inet\_ntop 爱被打了一巴掌/ 2022年11月28日 13:19/ 0 赞/ 162 阅读
相关 error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_D 【问题】 vs2015写socket客户端时出现,(这是第二次遇到这个问题了上次vs2017,必须记一下,方便自己以后查看:P) SOCKADDR_IN Clie ╰+攻爆jí腚メ/ 2021年12月09日 07:07/ 0 赞/ 501 阅读
相关 在高版本VS进行套接字编程时:error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_ 问题描述 在高版本VS中进行套接字编程时, sin\_addr.S\_un.S\_addr = inet\_addr("127.0.0.1"); 在编译时会弹出 爱被打了一巴掌/ 2021年10月30日 00:26/ 0 赞/ 303 阅读
还没有评论,来说两句吧...