没有合适的资源?快使用搜索试试~ 我知道了~
详解inet_pton()和inet_ntop()函数
5星 · 超过95%的资源 28 下载量 141 浏览量
2020-10-15
21:07:37
上传
评论 1
收藏 60KB PDF 举报
温馨提示
试读
2页
主要介绍了inet_pton()和inet_ntop()函数,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
资源推荐
资源详情
资源评论
详解详解inet_pton()和和inet_ntop()函数函数
主要介绍了inet_pton()和inet_ntop()函数,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可
以参考下
inet_pton是一个IP地址转换函数,可以在将IP地址在“点分十进制”和“二进制整数”之间转换,而且inet_pton和inet_ntop这2个
函数能够处理ipv4和ipv6。算是比较新的函数了。
1.把把ip地址转化为用于网络传输的二进制数值地址转化为用于网络传输的二进制数值
int inet_aton(const char *cp, struct in_addr *inp);
inet_aton() 转换网络主机地址ip(如192.168.1.10)为二进制数值,并存储在struct in_addr结构中,即第二个参数*inp,函数返回
非0表示cp主机有地有效,返回0表示主机地址无效。(这个转换完后不能用于网络传输,还需要调用htons或htonl函数才能将
主机字节顺序转化为网络字节顺序)
in_addr_t inet_addr(const char *cp);
inet_addr函数转换网络主机地址(如192.168.1.10)为网络字节序二进制值,如果参数char *cp无效,函数返回-
1(INADDR_NONE),这个函数在处理地址为255.255.255.255时也返回-1,255.255.255.255是一个有效的地址,不过inet_addr
无法处理;
2.将网络传输的二进制数值转化为成点分十进制的将网络传输的二进制数值转化为成点分十进制的ip地址地址
char *inet_ntoa(struct in_addr in);
inet_ntoa 函数转换网络字节排序的地址为标准的ASCII以点分开的地址,该函数返回指向点分开的字符串地址(如
192.168.1.10)的指针,该字符串的空间为静态分配的,这意味着在第二次调用该函数时,上一次调用将会被重写(复盖),
所以如果需要保存该串最后复制出来自己管理!
我们如何输出一个点分十进制的IP呢?我们来看看下面的程序:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
int main()
{
struct in_addr addr1,addr2;
ulong l1,l2;
l1= inet_addr("192.168.0.74");
l2 = inet_addr("211.100.21.179");
memcpy(&addr1, &l1, 4);
memcpy(&addr2, &l2, 4);
printf("%s : %s", inet_ntoa(addr1), inet_ntoa(addr2)); //注意这一句的运行结果
printf("%s\n", inet_ntoa(addr1));
printf("%s\n", inet_ntoa(addr2));
return 0;
}
实际运行结果如下:
192.168.0.74 : 192.168.0.74 //从这里可以看出,printf里的inet_ntoa只运行了一次。
192.168.0.74
211.100.21.179
inet_ntoa返回一个char *,而这个char *的空间是在inet_ntoa里面静态分配的,所以inet_ntoa后面的调用会覆盖上一次的调用。
第一句printf的结果只能说明在printf里面的可变参数的求值是从右到左的,仅此而已。
3.新型网路地址转化函数新型网路地址转化函数inet_pton和和inet_ntop
这两个函数是随IPv6出现的函数,对于IPv4地址和IPv6地址都适用,函数中p和n分别代表表达(presentation)和数值
(numeric)。地址的表达格式通常是ASCII字符串,数值格式则是存放到套接字地址结构的二进制值。
#include <arpe/inet.h>
int inet_pton(int family, const char *strptr, void *addrptr); //将点分十进制的ip地址转化为用于网络传输的数值格式
返回值:若成功则为1,若输入不是有效的表达式则为0,若出错则为-1
const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len); //将数值格式转化为点分十进制的ip地址格式
返回值:若成功则为指向结构的指针,若出错则为NULL
资源评论
- 好运爆棚2023-07-25这篇文章的解释非常简明扼要,让我快速理解了inet_pton和inet_ntop函数的作用。
- IYA17382023-07-25阅读这篇文章后,我对inet_pton和inet_ntop函数的区别有了清晰的认识,很受益。
- 小埋妹妹2023-07-25这篇文章讲解inet_pton和inet_ntop函数非常详细,让我对它们有了更深刻的理解。
- 洋葱庄2023-07-25经过这篇文章的讲解,我对inet_pton和inet_ntop函数的功能和参数有了全面的了解,很棒。
- 东方捕2023-07-25这篇文章的实例非常实用,让我通过具体的代码了解了inet_pton和inet_ntop函数的使用方法。
weixin_38721691
- 粉丝: 4
- 资源: 907
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功