3.1 inet_aton()

int inet_aton(const char *cp, struct in_addr *inp);

  • 参数说明:

  • cp : IPv4点分十进制字符串,例如“192.168.1.2”、“10.28.1.1”等;

  • inp: 点分十进制转换成二进制后的结构体(网络字节序)

  • 返回值:成功返回非0;失败返回0

注意:

这个函数已经将inp转换为网络字节序;已经将inp转换为网络字节序;已经将inp转换为网络字节序;

  • 举例说明:
int inet_aton_demo()
{char *string="192.168.1.2";struct in_addr ip={0};unsigned char *c=NULL;int integer=0xc0a80102;/*用来对比测试*/if(!inet_aton(string, &ip)){printf("%s:%d error\n", __func__, __LINE__);return -1;}printf("%8.8x ---- %u\n", ip.s_addr, ip.s_addr);/**/c=(char *)&ip.s_addr;printf("%2.2x ---- %2.2x --- %2.2x --- %2.2x\n", *c, *(c+1), *(c+2), *(c+3));printf("%8.8x ---- %u\n", integer, integer);/**/c=(char *)&integer;printf("%2.2x ---- %2.2x --- %2.2x --- %2.2x\n", *c, *(c+1), *(c+2), *(c+3));
}

编译运行,结果如下:

root@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器# ./demo.out
0201a8c0 ---- 33663168
c0 ---- a8 --- 01 --- 02        --->inet_aton()转换后的字节序c0a80102 ---- 3232235778
02 ---- 01 --- a8 --- c0        --->正常的主机字节序
root@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器#

从上述结果可以看出:

inet_aton()会将点分十进制的字符串转换为网络字节序的二进制数。此时如果要做网络用途使用的话,无需再次转换(即,无需再通过htonl做转换);但是如果想在本地上查看转换后的结果,则需要做一个转换(需要使用ntohl)。

3.2 inet_ntoa()

char *inet_ntoa(struct in_addr in);

  • 参数说明:

  • inp: 点分十进制转换成二进制后的结构体(网络字节序)

  • 返回值 : IPv4点分十进制字符串指针,例如“192.168.1.2”、“10.28.1.1”等;

注意:

不可重入,不可重入,不可重入

​ 因为转换后的字符串使用同一块静态内存区,再次调用会被覆盖。

  • 举例说明:
int inet_ntoa_demo()
{char *string=NULL;struct in_addr ip;unsigned char *c=NULL;ip.s_addr = 0xc0a80102;/** 1. char *inet_ntoa(struct in_addr in);*/if(!(string=inet_ntoa(ip))){printf("%s:%d %s\n", __func__, __LINE__, strerror);return -1;}printf("%s\n", string);printf("%8.8x ---- %u\n", ip.s_addr, ip.s_addr);/**/c=(char *)&ip.s_addr;printf("%2.2x ---- %2.2x --- %2.2x --- %2.2x\n", *c, *(c+1), *(c+2), *(c+3));ip.s_addr = htonl(0xc0a80102);/*转换为网络字节序*/if(!(string=inet_ntoa(ip))){printf("%s:%d %s\n", __func__, __LINE__, strerror);return -1;}printf("%s\n", string);printf("%8.8x ---- %u\n", ip.s_addr, ip.s_addr);/**/c=(char *)&ip.s_addr;printf("%2.2x ---- %2.2x --- %2.2x --- %2.2x\n", *c, *(c+1), *(c+2), *(c+3));/*root@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器# ./demo.out 0201a8c0 ---- 33663168c0 ---- a8 --- 01 --- 02root@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器# */
}

编译运行,结果如下:

root@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器# ./demo.out
2.1.168.192
c0a80102 ---- 3232235778            ---主机字节序
02 ---- 01 --- a8 --- c0192.168.1.2
0201a8c0 ---- 33663168              ---网络字节序
c0 ---- a8 --- 01 --- 02
root@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器#

从上述结果可以看出:

inet_ntoa()会将二进制数以网络字节序的方式解析为点分十进制字符串。因此我们再定义in_addr变量时,直接将其s_addr的值转换为网络字节序;但是如果想在本地上查看转换后的结果,则需要做一个转换(需要使用ntohl)。

小结: 使用in_addr.s_addr时,这个值里存储的应该一直为网络字节序。本地想查看该变量的值,应作一次ntohl转换;如果做网络收发等等,则无需做任何转换。

inet_aton和inet_ntoa相关推荐

  1. IP地址转换函数——inet_pton inet_ntop inet_aton inet_addr inet_ntoa

    inet_pton NAME     inet_pton - 将 IPv4 和 IPv6 地址从点分十进制转换为二进制 SYNOPSIS #include <arpa/inet.h>int ...

  2. MySQL inet aton函数,基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析

    有个统计需求,需要对IP进行分类统计,Mysql提供了inet_aton()和inet_ntoa()函数进程处理. 具体可以 INET_ATON(expr)给出一个作为字符串的网络地址的点地址表示,返 ...

  3. inet_aton mysql_MySQL_IP处理函数inet_aton()和inet_ntoa()使用说明,MYSql的IP对int的转换函数 select i - phpStudy...

    IP处理函数inet_aton()和inet_ntoa()使用说明 MYSql的IP对int的转换函数 select inet_aton(ip) from table_name; 网络地址: 192. ...

  4. mysql inet_aton 原理_mysql 使用inet_aton和inet_ntoa处理ip地址

    本文将介绍如何在数据库中使用合适格式保存ip地址数据,并能方便的对ip地址进行比较的方法. 1.保存ip地址到数据库 数据库中保存ip地址,字段一般会定义为: `ip` char(15) NOT NU ...

  5. php inet_aton(),如何通过mysql 利用inet_aton和inet_ntoa来处理ip地址数据

    本文将介绍如何在数据库中使用合适格式保存ip地址数据,并能方便的对ip地址进行比较的方法. 1.保存ip地址到数据库 数据库中保存ip地址,字段一般会定义为:`ip` char(15) NOT NUL ...

  6. mysql inet_aton 原理_基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析_MySQL

    bitsCN.com 有个统计需求,需要对IP进行分类统计,Mysql提供了inet_aton()和inet_ntoa()函数进程处理. 具体可以查看官方手册. INET_ATON(expr)给出一个 ...

  7. MySQL inet aton函数_有个统计需求,需要对IP进行分类统计,Mysql提供了inet_aton()和inet_ntoa()函数进程处理。具体可以查看官方手册。INET_ATON(e...

    有个统计需求,需要对IP进行分类统计,Mysql提供了inet_aton()和inet_ntoa()函数进程处理. 具体可以 INET_ATON(expr)给出一个作为字符串的网络地址的点地址表示,返 ...

  8. inet_aton、inet_ntoa、inet_pton和inet_ntop

    写在前面: inet_aton.inet_ntoa.inet_pton和inet_ntop都是用于IP地址与大端网络字节序二进制数字相互转换的函数 不同的是inet_aton和inet_ntoa只支持 ...

  9. java inet aton_IP处理函数inet_aton()和inet_ntoa()使用说明

    MYSql的IP对int的转换函数 select inet_aton(ip) from table_name; 网络地址: 192.168.33.123 每一个值最大不会越过255,也就是十六进制的F ...

  10. mysql inet aton ipv6_mysql 使用inet_aton和inet_ntoa处理ip地址数据

    创建表 CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NUL ...

最新文章

  1. 记录一下提取文件夹中所有文件名字
  2. Coding中遇到的BUG集合~
  3. Scala \和%运算小案例
  4. mysql8.0.21.0 安装
  5. Selenium模拟JQuery滑动解锁
  6. Bailian3255 十进制到六进制【进制】
  7. GD32MCU硬件I2C学习(一)
  8. 计算机制作ppt考试题,计算机二级PPT真题:制作计算机发展简史PPT
  9. 2020洪灾地图_卫星地图看洪灾:“告急”的鄱阳湖发生了什么?
  10. SD-WAN是怎么实现的?纯技术篇(上)Sdwan-Cheap
  11. kalibr_calibrate_cameras 卡在 Extracting calibration target corners
  12. 计算机组成原理之MIPS汇编:冒泡排序
  13. 学习PerfDog安卓(Android)APP的性能测试(1)
  14. 漫谈:一个工作两年半的程序员的人生感悟
  15. SpringBoot(45) 实现快递物流查询(阿里云)
  16. Mac版DBeaver调整编辑窗口字体大小
  17. 性能测试流程-性能测试2
  18. 经典力学、相对论、量子力学
  19. linux cpu跑分软件,Geekbench 5 5.2.3 硬件性能跑分工具 特别版
  20. 服务无法在此时接受控制信息

热门文章

  1. 设置鼠标右键文件夹打开idea
  2. 【BZOJ1226/SDOI2009】学校食堂Dining
  3. JSON.stringfy()详解
  4. 用GPIO模拟SPI接口读取传感器数据
  5. 每日一练-1-AD和中望CAD
  6. C语言简单的双人小游戏
  7. 蓝桥杯——机器人行走(模拟类题目)Java语言实现
  8. python甜橙歌曲音乐网站平台源码
  9. AD7606的国产替代方案—ADCS8162
  10. EDA之立创EDA专业版使用(原理图绘制)