Chinaunix首页 | 论坛 | 博客
  • 博客访问: 541765
  • 博文数量: 129
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1888
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-20 11:09
文章分类

全部博文(129)

文章存档

2016年(1)

2015年(5)

2014年(64)

2013年(59)

我的朋友

分类: C/C++

2013-11-01 11:05:42


  1. /*
  2.     将字符串形式的ip地址转换为一个整数
  3.     ip地址的每一段以一个字节来表示,最终组合成一个int数据
  4.     要使用unsigned int,不然会有溢出,但是对于ip地址第一字段为256的情况下还是会溢出
  5. */

  6. /*
  7.     条件:
  8.     1、不使用任何库函数
  9.     2、考虑各种异常输入情况
  10.     3、代码尽可能优化

  11. */

  12. #include<iostream>
  13. #include<string>
  14. #include<assert.h>
  15. using namespace std;

  16. unsigned int str_2_int(string str)
  17. {
  18.     assert(str.size()>0);
  19.     unsigned int sum=0;
  20.     int pos=0;
  21.     while(pos<str.length())
  22.     {
  23.      unsigned int num=0;
  24.         assert(str[pos]>='0');
  25.         assert(str[pos]<='9');

  26.         while(pos<str.length() && str[pos]!='.')
  27.         {
  28.          num=num*10+(str[pos]-'0');
  29.             pos++;
  30.         }
  31.         if(pos==str.length())
  32.         {
  33.          sum=sum*256+num;
  34.             //???í????
  35.             assert(sum>=0);
  36.             break;
  37.         }
  38.         sum=sum*256+num;
  39.         //???í????
  40.         assert(sum>=0);
  41.         pos++;
  42.     }
  43.     return sum;
  44. }

  45. int main()
  46. {
  47.     unsigned int num;
  48.     string str="192.168.88.10";
  49.     num=str_2_int(str);
  50.     printf("%u\n",num);
  51.     return 0;

  52. }
         运行结果如下:
       

 232=4294967296






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