【问题标题】:Convert string to integer ( binary equivalent )将字符串转换为整数(二进制等效)
【发布时间】:2014-04-05 22:30:07
【问题描述】:

我已经看到很多方法可以根据字符表示的内容(整数 12345)将字符串(例如“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 ;

但我正在处理非常大的字符串,并且想要一种更快的方法来转换它

【问题讨论】:

  • 您可能需要检查std::bitset&lt;&gt;'s 字符串转换函数。
  • 您的编译器支持 64 位 int 类型?您的代码 sn-p 中的“总”变量是一个 int。
  • 你的号码与二进制不匹配,那也不好。您可能想使用 pow(2,i*8) 来代替。
  • 您在问题中说“我需要能够将字符串二进制等价物转换为整数”,但您的代码示例不是转换“0010001”字符串而是文本字符串“你好!”,不清楚你在追求什么!!
  • @dampsquid "hello" 似乎是字符串输入。然后,他根据每个字母的 ascii 代码将每个字符转换为其二进制等价物……或者看起来是这样。然后将这些位用作整数。

标签: c++ string data-conversion


【解决方案1】:

第一个改进:用左移 (&lt;&lt;) 替换 pow 和相关的转换。

【讨论】:

    【解决方案2】:

    您可以使用 std::bitset 类。请参阅下面的示例。

    #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(),则整数需要在 unsigned long 的最大限制范围内,如果使用 to_ullong(),则需要在 unsigned long long 的最大限制范围内。

    【讨论】:

    • ASCII 二进制数字的字符串是从哪里来的?问题看起来像输入是文本。
    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2012-08-16
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多