我已经看到很多方法来转换字符串,如" 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 ;
但我正在使用非常大的字符串,并希望以更快的方式转换它
答案 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。