Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6099596
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类:

2012-05-11 00:41:42

原文地址:Linux下几个网络转换函数 作者:wmiss414


 

点击(此处)折叠或打开

  1. int inet_aton(const char *cp, struct in_addr *inp);
  2. in_addr_t inet_addr(const char *cp);
  3. in_addr_t inet_network(const char *cp);

其中,typedef uint32_t in_addr_t

区别:

    inet_addr和inet_network函数都是用于将字符串形式转换为整数形式用的,两者区别很小,inet_addr返回的整数形式是网络字节序,而inet_network返回的整数形式是主机字节序。

    上面两个函数都有个bug,就是当IP是255.255.255.255时,这两个函数会认为这是个无效的IP地址,这是历史遗留问题,其实在目前大部分的路由器上,这个255.255.255.255的IP都是有效的。

     而inet_aton函数和上面这两个函数的区别就是在于他认为255.255.255.255是有效的。所以建议多使用这个函数,那两个还是少用为好:)。同时,inet_aton函数返回的是网络字节序的IP地址。

     更多详情请参考Linux Man Page。

     参见下面的例子:

    

点击(此处)折叠或打开

  1. #include<unistd.h>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<netinet/in.h>
  6. #include<sys/socket.h>
  7. #include<sys/types.h>

  8. int main()
  9. {
  10.         char str[]="255.255.255.255";
  11.         in_addr_t r1,r2,r3;
  12.         struct in_addr inp;
  13.         
  14.         r1=inet_addr(str);
  15.         if(r1==-1)
  16.         {
  17.             printf("inet_addr return -1 when 255.255.255.255\n");
  18.         }
  19.         else
  20.         {
  21.             printf("inet_addr:ip=%lu\n",ntohl(r1));
  22.         }
  23.         
  24.         r2=inet_network(str);
  25.         if(r2==-1)
  26.         {
  27.             printf("inet_network return -1 when 255.255.255.255\n");
  28.         }
  29.         else
  30.         {
  31.             printf("inet_network:ip=%lu\n",r2);
  32.         }
  33.         
  34.         r3=inet_aton(str,&inp);
  35.         if(r3==0)
  36.         {
  37.             printf("inet_aton return -1 when 255.255.255.255\n");
  38.         }
  39.         else
  40.         {
  41.             printf("inet_aton:ip=%lu\n",ntohl(inp.s_addr));
  42.         }
  43.         
  44.         return 0;
  45. }



 

 


 

阅读(553) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~