#include <iostream>
#include <string>
using namespace std;
unsigned int convert_ip_2_uint(string& strip)
{
const char* pstr = strip.c_str();
int tmparr[4] = {0};
int nBegin =0;
int nPoint = 0;
for(int i=0;i<(int)strip.length();i++)
{
if(pstr[i] == '.' || i == (int)strip.length()-1)
{
string strtmp = strip.substr(nBegin,i);
tmparr[nPoint] = atoi(strtmp.c_str());
if(tmparr[nPoint] > 255)
{
return 0;
}
nPoint ++;
if(nPoint >= 4)
{
break;
}
nBegin = i+1;
}
}
if(nPoint != 4)
{
return 0;
}
unsigned int nip = 0;
char* pip = (char*)&nip;
*pip++ = (char)tmparr[3];
*pip++ = (char)tmparr[2];
*pip++ = (char)tmparr[1];
*pip = (char)tmparr[0];
return nip;
}
string convert_uint_2_ip(unsigned int nip)
{
string ipstr;
unsigned char* pip = (unsigned char*)&nip;
int iparr[4] = {0};
iparr[3] = (int)*pip++;
iparr[2] = (int)*pip++;
iparr[1] = (int)*pip++;
iparr[0] = (int)*pip;
char szip[128] = {0};
for(int i=0;i<4;i++)
{
itoa(iparr[i],szip,10);
if(i != 3)
{
ipstr = ipstr + szip + ".";
}
else
{
ipstr = ipstr + szip;
}
}
return ipstr;
}
int main()
{
while(true)
{
cout<<"IP:";
string ipstr;
cin>>ipstr;
if(ipstr == "exit")
{
break;
}
else
{
unsigned int nip = convert_ip_2_uint(ipstr);
if(nip != 0)
{
cout<<"v4=>"<<nip<<"=>"<<convert_uint_2_ip(nip).c_str()<<endl;
}
else
{
cout<<"IP格式错误!"<<endl;
}
}
}
return 0;
}