原理: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; else return -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; }