博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3. IP地址转换函数
阅读量:5949 次
发布时间:2019-06-19

本文共 970 字,大约阅读时间需要 3 分钟。

一、字符串表示的IP地址需要被转化为整数(二进制数)方能使用

IPv4地址:点分十进制字符串

IPv6地址:十六进制字符串

有时(如记录日志),我们则要把整数(二进制数)表示的IP地址转化为可读的字符串

 

二、三个只能用于IPv4地址的函数

/* 点分十进制数串 <----> 长度为32位的网络字节序二进制值 */in_addr_t	inet_addr(const char *strptr);int			inet_aton(const char *cp, struct in_addr *inp)char*		inet_ntoa(struct in_addr in);

1. inet_ntoa是不可重入的,其内部用一个静态变量存储转化的结果,返回值指向该静态内存

char *pAddr1 = inet_ntoa("1.2.3.4");char *pAddr2 = inet_ntoa("10.194.71.60");printf("address 1: %s\n", pAddr1);printf("address 2: %s\n", pAddr2);/*  上面代码的输出结果  */// address 1: 10.194.71.60// address 2: 10.194.71.60

 

2. inet_addr存在缺陷,现已被废弃,可用inet_aton来代替它

 

三、同时适用于IPv4和IPv6地址的函数

int			inet_pton(int family, const char *src, void *dst);const char* inet_ntop(int family, const void *src, char *dst, socklen_t len);

参数len用于指定目标存储单元的大小,以免该函数溢出其调用者的缓冲区,有两个宏能帮助我们指定这个大小

#define INET_ADDRSTRLEN		16			// 用于IPv4 #define	INET6_ADDRSTRLEN	46			// 用于IPv6

  

四、余音绕梁

1. 推荐使用inet_pton和inet_ntop函数  

  

  

转载于:https://www.cnblogs.com/xzxl/p/9561231.html

你可能感兴趣的文章
SpringBoot 过滤器, 拦截器, 监听器 对比及使用场景
查看>>
数据库索引探索
查看>>
struts2使用json需要注意的问题
查看>>
gitlab runner 优化
查看>>
快速添加百度网盘文件到Aria2 猴油脚本
查看>>
mac 无法登录mysql的解决办法
查看>>
Shiro权限判断异常之命名导致的subject.isPermitted 异常
查看>>
Hello world travels in cpp - 字符串(2)
查看>>
struts2自定义拦截器
查看>>
Eclipse安装adt插件后之后看不到andorid manger
查看>>
Kafka服务端脚本详解(1)一topics
查看>>
Zookeeper 集群安装配置,超详细,速度收藏!
查看>>
js中var self=this的解释
查看>>
js--字符串reverse
查看>>
面试题
查看>>
Facebook 接入之获取各个配置参数
查看>>
android ant Compile failed; see the compiler error
查看>>
项目经理笔记一
查看>>
计算机字符编码从0/1到UTF-8
查看>>
[原]Jenkins(三)---Jenkins初始配置和插件配置
查看>>