将字符串转换为整数(二进制等效)

时间:2014-04-05 22:30:07

标签: c++ string data-conversion

我已经看到很多方法来转换字符串,如" 12345"基于charecters表示的整数(整数12345),我需要能够取一个字符串的二进制等价物并将 转换为整数。例如,取字符串" Hello!" 。在硬盘驱动器(或内存)上,它存储为二进制模式:

010010000110010101101100011011000110111100100001

如果将这些位视为二进制数而不是文本,则该模式也等于79600447942433。

"你好!" = 79600447942433

我现在唯一的方法是循环直到字符串结尾并将单个字符转换为整数,然后乘以2 ^ position_of_charecter

#include <string>
#include <cmath>
using namespace std ;
// ...
string str = "Hello!" ; int i , total , temp ; unsigned char letter ;
for ( i = 0 ; i < str.length() ; i++ )
{
    letter = string[ i ] ;
    temp = ( int ) letter ;
    total += ( temp * pow( 2 , i ) ) ;
}
cout << "\"Hello!\" is equal to " << total << endl ;

但我正在使用非常大的字符串,并希望以更快的方式转换它

2 个答案:

答案 0 :(得分:1)

第一项改进:使用左移(pow)替换<<和关联的转化。

答案 1 :(得分:0)

您可以使用std :: bitset&lt;&gt;类。见下面的示例。

#include <bitset>
#include <iostream>

using namespace std;

int main()
{
    bitset<64> allBits("010010000110010101101100011011000110111100100001");
    cout << allBits.to_ullong();  // C++ 11.  If using earlier version, use to_ulong().
}

请注意,如果使用to_ulong(),则整数将需要符合无符号long的最大限制;如果使用to_ullong(),则整数将需要符合unsigned long long。