您的位置:首页 > 其它

ip字符串转换为 二进制整数

2014-10-08 19:55 344 查看
[cpp] view
plaincopy

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

}

[cpp] view
plaincopy

// main output

[cpp] view
plaincopy

<img src="http://my.csdn.net/uploads/201204/23/1335173052_5042.JPG" alt="">

[cpp] view
plaincopy
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: