http://roclinux.cn/?p=1160

知识背景:

210.25.132.181属于IP地址的ASCII表示法,也就是字符串形式。英语叫做IPv4 numbers-and-dots notation。

如果把210.25.132.181转换为整数形式,是3524887733,这个就是整数形式的IP地址。英语叫做binary data。(其实binary是二进制的意思)

问题所在:

如何在字符串形式的IP和整数形式的IP之间转换呢?

问题解决思路:

有三个函数可以解决这个问题,当然不止这三个函数,只是这三个函数最常用且最易混淆。

隆重推出他们:inet_network(), inet_addr(), inet_aton()!!

三者定义:

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

in_addr_t inet_addr(const char *cp);

in_addr_t inet_network(const char *cp);

三者区别:

先说出区别吧,不卖关子。但其实这样不好,因为我怕你因为知道了结论而不去动手实践了。(你不会的,是吧? ^_^)

纸上得来终觉浅,绝知此事要躬行。

inet_addr和inet_network函数都是用于将字符串形式转换为整数形式用的,两者区别很小,inet_addr返回的整数形式是网络字节序,而inet_network返回的整数形式是主机字节序。(你一定会纳闷,为什么函数叫inet_network,却返回的是主机字节序,呵呵,就是这么奇怪,你又有什么办法呢…)其他地方两者并无二异。他俩都有一个小缺陷,那就是当IP是255.255.255.255时,这两个“小子”(对这两个函数的昵称,请谅解…^_^)会认为这是个无效的IP地址,这是历史遗留问题,其实在目前大部分的路由器上,这个255.255.255.255的IP都是有效的。

inet_aton函数和上面这俩小子的区别就是在于他认为255.255.255.255是有效的,他不会冤枉这个看似特殊的IP地址。所以我们建议你多多支持这个函数,那两个小子还是少用为好:)对了,inet_aton函数返回的是网络字节序的IP地址。

好了,区别就这么简单,只要你能潜下心来看五分钟,就OK了。哦,忘了,什么叫网络字节序,什么叫主机字节序?这两个概念,如果你不太了解,你最好去找一本socket编程的书籍看一看,我保证没有5分钟,你就会了解这两个概念。

编程举例:

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/types.h>int main()
{char str[]="255.255.255.255";in_addr_t r1,r2,r3;struct in_addr inp;r1=inet_addr(str);if(r1==-1){printf("inet_addr return -1 when 255.255.255.255\n");}else{printf("inet_addr:ip=%lu\n",ntohl(r1));}r2=inet_network(str);if(r2==-1){printf("inet_network return -1 when 255.255.255.255\n");}else{printf("inet_network:ip=%lu\n",r2);}r3=inet_aton(str,&inp);if(r3==0){printf("inet_aton return -1 when 255.255.255.255\n");}else{printf("inet_aton:ip=%lu\n",ntohl(inp.s_addr));}return 0;
}

你肯定会理解的,只要把str的值稍微修改修改,你就可以得到不同的结果,从而看出其中玄机~~:)
over~

inet_aton和inet_network和inet_addr三者比较-《别怕Linux编程》之五相关推荐

  1. bus,device,driver三者关系

    bus,device,driver三者关系 bus: 总线作为主机和外设的连接通道,有些总线是比较规范的,形成了很多协议.如 PCI,USB,1394,IIC等.任何设备都可以选择合适的总线连接到主机 ...

  2. Socket编程 - 网络基础知识

    API编程部分:http://www.cnblogs.com/Jimmy1988/p/7895213.html 1. 协议简介 此处,我们主要介绍Linux编程常用的三种协议(TCP/UDP/IP), ...

  3. Linux Socket详解 大全 基础知识

    1. Socket基础概念: 1.1:形象类比: Socket和电话网络的概念可以做一个很好的类比: Linux 编程中所说的socket就如同一个端点,类比到电话网中,它就如同一个电话机. 而Soc ...

  4. 网络编程 网络地址点分十进制和二进制之间的转换

    网络编程 网络地址点分十进制和二进制之间的转换 点分十进制->二进制 点分十进制转二进制的函数有inet_addr,inet_aton,inet_network,inet_pton,它们都将输入 ...

  5. IP地址和二进制IP地址之间的转换

    我们看到的IP通常是类似于127.0.0.1这样的字符串,然而计算机理解的则是像0x01111111100000000000000000000001(127.0.0.1)这样的ip地址方式. 对于Li ...

  6. Beej网络编程指南《三》

    9手册 在Unix世界里,有很多手册.它们有小部分描述了你可以使用的单个函数. 当然,手动的东西太难打了.我的意思是,在Unix世界里,没有人,包括我自己,喜欢打那么多.事实上,我可以长篇大论地说我有 ...

  7. Socket编程:必须要了解的网络字节序和转换函数

    目录 主机字节序和网络字节序 转换函数 htonl .htons .ntohl 和 ntohs inet_addr .inet_aton 和 inet_ntoa inet_pton 和 inet_nt ...

  8. Epoll例子的使用

    第一部分:Epoll简介 问题 :  Select,Poll和Epoll的区别 答案 : Epoll和Select的区别 1.  遍历方式的区别 .select判断是否有事件发生是遍历的,而epoll ...

  9. socket地址API

    主机字节序和网络字节序 现代CPU的累加器一次都能装载 (至少) 4字节(这里考虑32位机,下同),即-一个整数.那么这4字节在内存中排列的顺序将影响它被累加器装载成的整数的值.这就是字节序问题.字节 ...

最新文章

  1. web中的cookies以及作用--web testing 学习笔记
  2. android 启动app过程,Android P APP冷启动过程全解析(之四)
  3. Android推送进阶课程学习笔记
  4. 博士申请 | 北京大学信息科学技术学院段凌宇教授招收2022级博士生
  5. Surprise官方文档练习
  6. Mar9th 海尔java面试
  7. 抹机王怎么一键新机_抹机王助手_手机数据修改_抹机王app下载_易玩网
  8. 【国信安实训】——文件上传漏洞
  9. winscp 进入mysql命令_Winscp使用密钥登录
  10. 微信小程序中进行地图导航
  11. 设置锁屏方式后,锁屏长按电源键还有锁屏按钮(lockdown)锁屏状态下应该没有,解锁使用后长按才有这个按钮。
  12. 联想计算机怎么关机,联想笔记本怎么关机
  13. 法原子能机构将福岛核电站爆炸事故提升至6级
  14. 比 Xshell 还好用的 SSH 客户端神器,MobaXterm 太爱了!
  15. Java 实现位运算计算加减乘除
  16. [ MessAuto ]: 短信验证码自动填充,理论支持所有浏览器或 APP, Only For Mac
  17. 职场回头草,可吃得?
  18. Canvas绘制八卦图
  19. 穷查理宝典-----第二章 (芒格的生活、学习决策方法)
  20. 小肚皮最新版本_小肚皮下载_小肚皮APP手机最新版安装 - 风云下载

热门文章

  1. Android --- RecycleView获取第 i 个 item 里面的控件并进行赋值
  2. Android --- 命名规范
  3. Python 字典类型的使用
  4. Android --- Unable to resolve dependency for ‘:app@debug/compileClasspath‘: Could not resolve com.a
  5. mysql英文版怎么调中文_MYSQL 5.6安装设置中英文翻译
  6. php实现返回界面,PHP实现模仿socket请求返回页面的方法
  7. es重建字段类型_关于elasticsearch中更新数据的几种方式
  8. 全球海拔最高的国际级数据中心竣工,西藏有了大数据存储中心
  9. Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法)
  10. Paper之IEEERSJ:2009年~2019年机器人技术(IEEE机器人和自动化国际会议RSJ智能机器人与系统国际会议机器人技术:科学与系统机器人学报)历年最佳论文简介及其解读