- #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
- <img src="https://img-my.csdn.net/uploads/201204/23/1335173052_5042.JPG" alt="">