OJ系列之---IP与整数之间的转换

来源:互联网 发布:indian pines数据介绍 编辑:程序博客网 时间:2024/05/18 04:01

原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                   00001010
0                    00000000
3                    00000011
193                  11000001
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

 

的每段可以看成是一个0-255的整数,需要对IP地址进行校验

#include<iostream>using namespace std;long TransferIP(string str);int main(){  char a[32]={0};  long b,tem[4]={0},i;  cin.get(a,32,'\n');  cin>>b;  cout<<TransferIP(a)<<endl;  for(i=0;i<4;i++)   {  tem[3-i]=b%256;  b/=256;  }  for(i=0;i<3;i++)   cout<<tem[i]<<'.';  cout<<tem[i]<<endl;  return 0;}long TransferIP(string str){////////////////整数与IP地址之间的转换/////////////////////////int i,j,tem=0,len=str.size(),con=0,n,temp[4]={0};long res=0;string a="";for(i=0;i<=len;i++){if(str[i]=='.'||i==len){            a=str.substr(tem,i-tem);tem=i+1;n=a.size();if(n==0||n>3) return -1;for(j=0;j<n;j++){if(a[j]>='0'&&a[j]<='9')temp[con]=int(a[j]-'0')+temp[con]*10;elsereturn -1;}if(temp[con]>255||temp[con]<0) return -1;con++;}}if(con!=4)return -1;for(i=0;i<con;i++)res=res*256+temp[i];return res;}


0 0
原创粉丝点击