华为机试——整数与IP地址间的转换
来源:互联网 发布:天敏网络机顶盒打不开 编辑:程序博客网 时间:2024/06/03 22:40
整数与IP地址间的转换
原理:IP地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。
举例:一个IP地址为10.0.3.193
每段数字转换成相应的二进制数
10 00001010
0 00000000
3 00000011
193 1100001
组合起来即为:00001010000000000000001111000001转换成10进制数就是167773121,即该IP地址转换后的数字就是它了。
每段可以看成是一个0-255的整数,需要对IP地址进行检验。
#include<iostream>#include<string>#include<cctype>#include<cstdlib>using namespace std;string Int2Bit(string str) //将十进制数转换为二进制{ int num=atoi(str.c_str()); string tmp; char tmp1[10]={0}; itoa(num,tmp1,2);//10转换的结果为1010 tmp=string(tmp1); if(tmp.size()<8) { string tmp2(8-tmp.size(),'0'); str=tmp2+tmp;//在前面补零 } else str=tmp; //cout<<str<<endl; return str;}unsigned int Bit2Dec(string str)//二进制转换为十进制{ unsigned int result=0; string::size_type i=0; while(i<str.size()) result=(result<<1)+(str[i++]-'0');//一定要加括号,<<的运算级别低于+ return result;}unsigned int IpToInt(string ip){ string str[4],BitIP; int k=0,flag=0; string::size_type i=0; while(i<ip.size()) { int tmp=i; while(isdigit(ip[tmp])) tmp++; str[k]=ip.substr(i,tmp-i); k++; i=tmp+1; } for(int i=0;i<4;i++) if(atoi(str[i].c_str())>=0 && atoi(str[i].c_str())<256) flag++; if(flag==4) { for(int i=0;i<4;i++) { string temp=Int2Bit(str[i]); BitIP+=temp; //cout<<BitIP<<endl; } } else return -1; return Bit2Dec(BitIP);}void Int2IP(unsigned int n){ string s,tmp; int a,b,c,d; char Bits[33]={0};//数组大小应大于32位,还包含‘\0’,否则会出错 itoa(n,Bits,2); //十进制转换成二进制 tmp=string(Bits); if(tmp.size()<32) { string tmp2(32-tmp.size(),'0');//前面补零 s=tmp2+tmp; } else s=tmp; a=Bit2Dec(s.substr(0,8)); b=Bit2Dec(s.substr(8,8)); c=Bit2Dec(s.substr(16,8)); d=Bit2Dec(s.substr(24,8)); cout<<a<<'.'<<b<<'.'<<c<<'.'<<d<<endl;}int main(){ string ip; unsigned int num; cin>>ip; num=IpToInt(ip); cout<<num<<endl; Int2IP(num); return 0;}
0 0
- 【华为机试】整数与IP地址间的转换
- 华为机试——整数与IP地址间的转换
- 华为机试—整数与IP地址间的转换
- 华为机试-整数与IP地址之间的转换
- 华为机试在线训练-牛客网(21)整数与IP地址间的转换
- 华为OJ——整数与IP地址间的转换
- 华为OJ——整数与IP地址间的转换
- 华为OJ——整数与IP地址间的转换
- 华为OJ 整数与IP地址间的转换
- 华为OJ(整数与IP地址间的转换)
- 【华为OJ】【030-整数与IP地址间的转换】
- 【华为 OJ 】整数与IP地址间的转换
- 华为OJ:ip地址与整数之间的转换
- 华为oj中级 整数与IP地址之间的转换
- 整数与IP地址间的转换
- 整数与IP地址间的转换
- 整数与IP地址间的转换
- 整数与IP地址间的转换
- 前端面试题目搜集——理论知识
- ios 通知
- 重拾编程之路--leetcode(java)--删除(覆盖)指定数组元素,输出新长度
- ListView 如何判断ListView是否可以滑动(即ListView的Item总数是否超过可视区域)
- C Primer Plus学习笔记之第一,二章——预备知识
- 华为机试——整数与IP地址间的转换
- 三种UITableViewCell刷新的方法
- leetcode:292. Nim Game
- 字符串转枚举类型
- swift 2.0 字符串操作...
- C语言学习之关键字第十四讲
- 关于ddms上连接安卓设备,adb的调试
- POJ-2336 Ferry Loading II(简单DP)
- 算法竞赛入门经典第二版的 纵横之谜的答案 uva 232