inet_pton和inet_ntop函数

news/2024/7/2 23:38:57
  Linux下这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换

  而且,inet_pton和inet_ntop这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的结构体,并复制在*dst中

  af =AF_INET6

  src为指向IPV6的地址,,函数将该地址

  转换为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的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将errno置为ENOSPC

  下面是例程

  char IPdotdec[20];   //存放点分十进制IP地址

  struct in_addr s;      // IPv4地址结构体

  int main (void)

  {

  // 输入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); // 注意得到的字节序

  // 反转换

  inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);

  printf("inet_ntop: %s\n", IPdotdec);

  }


http://lihuaxi.xjx100.cn/news/235623.html

相关文章

Swift2.0系列]Error Handling(项目应用篇)

1.FileManager中的应用 倘若你只是想看FileManager中的 Error Handling是如何实现的&#xff0c;请找到3.删除文件以及4.获取文件信息。我分别为你提供了do-catch以及try?的使用方法。 打开Xcode,选中Single View Application&#xff0c;输入项目名称例如FileManagerDemo,点击…

FastJson 转换 javaBean 时 null 值被忽略都问题

[toc] 问题 当 JavaeBean 中某个属性值为 null 时&#xff0c;转换为 JSONObject 对象或者 json 字符串时&#xff0c;该属性值被忽略。如何让不管值是否为 null&#xff0c;转化后该属性还存在&#xff0c;只是值为 null。 情况演示 class St {private String sid;private Str…

Swoft 2 Beta 发布,基于 Swoole 的云原生协程框架

Swoft 是首个基于 Swoole 原生协程的框架&#xff0c;从开发到发布据今已有2年多。 1.x 发布以来&#xff0c;已有大量的开发人员和企业使用&#xff0c;得到了大家的认可。从去年11月份开始&#xff0c;将近半年的时间从零开始&#xff0c;底层吸取之前经验&#xff0c;基于 S…

Linux驱动: rtc子系统

1. 前言 限于作者能力水平&#xff0c;本文可能存在的谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 本文分析代码基于Linux 3.10内核&#xff0c;硬件平台为嵌入式ARM32平台. 3. rtc子系统 3.1 相关代码文件列表 drivers/rtc/class.c …

cnblogs不愧为cnblogs

在cnblogs落脚3天了&#xff0c;写了一些很实践的文章&#xff0c;很有成就感&#xff0c;为什么&#xff1f;我第一次为是否发表这篇文章而作出思考&#xff0c;以前在别的地方&#xff0c;总是转别人的文章居多&#xff0c;到了cnblogs&#xff0c;感受到了原创的精神——即使…

NSHelper.showAlertTitle的两种用法 swift

var model : CarCity CarCity() if (NSString.isNullOrEmpty(locationLabel.text)) { NSHelper.showAlertTitle(nil, message: "暂无法定位&#xff0c;请检查网络。", cancel: "确定") return } if (NSString.isNullOrEmpty(plateTextFild.text)) { NSHe…

怎么使用CAD编辑器来打开图纸中的所有图层

在CAD绘图中&#xff0c;建筑设计师们不仅要对CAD图纸进行编辑&#xff0c;还要对CAD图纸进行查看&#xff0c;一张图纸中是有许多图层的&#xff0c;那在查看的过程中有的时候把其他的图层进行隐藏了&#xff0c;那如果想要把隐藏的CAD图层进行打开要怎么操作&#xff1f;如何…

sql server中的hash应用优化

sql server很多地方用到hash&#xff0c;计划缓存查找&#xff0c;hash连接&#xff0c;hash聚合等。 hash查找mssql很多设计中都应用了&#xff0c;不过我们能在开发设计中&#xff0c;也可以利用这个特性。 将如果有需求对大文本进行完全匹配&#xff0c;比如查找产品型号&am…