#include<iostream>
#include<string>
#include<stdlib.h>
#include <bitset>
using namespace std;
// 将ip字符串按照 '.'分割
string* ipSplit(string str)
{
string* retSTR = new string[4];
string tmp = "";
int i, count = 0;
for ( i = 0; i < str.length(); i++ )
{
if ( str[i] == '.' )
{
retSTR[count] = tmp;
++count;
tmp = "";
}
else
{
tmp += str[i];
}
}
retSTR[count] = tmp;
return retSTR;
}
// 将十进制数字字符串 转化为 二进制数字字符串
string digit2binary( string digitString )
{
string retSTR = "";
int digit = atoi(digitString.c_str());
while ( digit > 1)
{
if ( digit % 2 )
{
retSTR.insert(0, "1");
}
else
{
retSTR.insert(0, "0");
}
digit /= 2;
}
retSTR.insert(0, "1");
int len = retSTR.length();
while (len < 8)
{
retSTR.insert(0, "0");
++len;
}
return retSTR;
}
// 将二进制字符串转换为 二进制整数
int str2int(string str)
{
int len = str.length();
int intResult = 0;
int tmp = 0;
for (int i = 0; i < len-1; i++)
{
tmp = str.at(i) - '0';
if (tmp) // 为1,左移
{
intResult += ( tmp << (len-1-i) );
}
}
intResult += str.at(i) - '0';
return intResult;
// cout << "int: " << bitset<sizeof(int)*8>(intResult) << endl;
}
// ip字符串转化为 二进制整数
int ip2binary(string ip)
{
string* strArr = ipSplit( ip );
string stringResult = "";
for (int i = 0; i < 4; i++)
{
stringResult += digit2binary( strArr[i] );
}
int intResult = str2int(stringResult);
return intResult;
}
int main(int argc, char* argv[])
{
// string str = "202.114.0.242";
string ip = "202.128.1.255";
cout << "ip: " << ip << endl;
int intResult = ip2binary( ip );
cout << "int: " << bitset<sizeof(int)*8>(intResult) << endl;
return 0;
}
// main output