inet_ntoa:

功能:
将一个IP转换成一个互联网标准点分格式的字符串。
原型:
char FAR * inet_ntoa( struct in_addr in);
返回值:
如果正确,返回一个字符指针,指向一块存储着点分格式IP地址的静态缓冲区(同一线程内共享此内存);错误,返回NULL。
 
与此相反的函数:
inet_aton()是一个将一个字符串IP地址转换为一个32位的网络序列IP地址。
完整描述:
int inet_aton(const char *string, struct in_addr*addr);
参数描述:
1 输入参数string包含ASCII表示的IP地址。
2 输出参数addr是将要用新的IP地址更新的结构。
返回值:
如果这个函数成功,函数的返回值非零,如果输入地址不正确则会返回零。使用这个函数并没有错误码存放在errno中,所以它的值会被忽略。
函数说明及举例
对于这个函数有一点迷惑的就是这个函数调用所需要的两个参数。
如果我们定义了一个AF_INET套接口地址:
struct sockaddr_in adr_inet; /* AF_INET */
提供给inet_aton函数调用的第二个参数指针为 &adr_inet.sin_addr
 测试代码如下
 
  include <stdio.h>
 
  #include <sys/socket.h>
 
  #include <netinet/in.h>
 
  #include <arpa/inet.h>
 
  #include <string.h>
 
  int main(int aargc, char* argv[])
 
  {
 
  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/n", 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里面的可变参数的求值是从右到左的,仅此而已。
上面的这个问题值得重视。
 
 
inet_pton,inet_ntop这两个函数较新,对ipv4和ipv6地址都能处理。
p代表presentation,n代表numeric。
presentation格式通常是asciil串,nueric格式则是存在于套接口地址结构中的二进制值。
 
 
 
 

最新文章

  1. LINQ to SQL语句(17)之对象加载
  2. [Linux]系统调用理解(1)
  3. 关于iOS 10不能跳转设置的解决办法
  4. Device eth0 does not seem to be present, delaying initialization(解决克隆CentOS6.3虚拟机后网卡设备无法启动问题)
  5. html5基础知识点
  6. Android 手机卫士--xutils说明与下载方法使用
  7. IoC实践--用Autofac实现MVC5.0的IoC控制反转方法
  8. js实现复选框的全选、全不选、反选
  9. 单元测试利器之Jtester
  10. 【转】Winform下KeyDown,KeyPress,KeyUp事件的总结
  11. 关于Android圆形图片的一种优化方案(可以显示网络图片)
  12. HTML+CSS学习笔记 (13) - CSS代码缩写,占用更少的带宽
  13. sql server 2000 和 sql server 2005 数据库连接字符串区别
  14. GQ_百度百科
  15. Ignite China微软技术
  16. Linux学习笔记——举例说,makefile 添加宏定义
  17. Smarty数学运算
  18. javascript基础(二)类型转换
  19. p3966单词
  20. Nexus Repository Manager 3(CVE-2019-7238) 远程代码执行漏洞分析和复现

热门文章

  1. 读《编写高质量代码:改善JavaScript程序的188个建议》1
  2. js表格的输出
  3. Unity3D 3D坦克大战
  4. WPF 皮肤之MathApps.Metro UI库
  5. EditText属性详解
  6. uiscrollview上的 uipangesturerecognizer冲突
  7. bzoj1260[CQOI2007]涂色paint
  8. cocos2d-x使用DragonBones动画
  9. PHP-Wamp集成包安装教程
  10. mongodb数据库操作--备份 还原 导出 导入