#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; }