C ++将二进制(64位)转换为十进制

时间:2013-05-13 03:31:00

标签: c++

我使用string来包含64位二进制文​​件。

string aBinary;
aBinary = "100011111011101100000101101110000100111000011100100100110101100";

最初我试过这个..

stringstream ss;
ss << bitset<64>(aBinary).to_ulong();
buffer = ss.str();

cout << buffer << endl;

它适用于某些二进制文件,但是这个它不起作用。如何将包含在字符串容器中的上述64位二进制文​​件转换为字符串容器中的小数。

2 个答案:

答案 0 :(得分:1)

它溢出,因为to_ulong()是32位。

C ++ - 11引入了函数to_ullong(),这就是你想要的。如果没有,可以尝试将字符串拆分为两个,获取两个32位数字,转换为64位,执行移位和添加。

答案 1 :(得分:0)

也许你可以用C:

完成它
char *Str = "0100011111011101100000101101110000100111000011100100100110101100";
char *ptr = NULL;
unsigned long long toValue;

toValue = 0;

ptr = Str + strlen(Str) - 1;
for(int i = 0 ; i < strlen(Str) , ptr != Str ; i++,ptr--)
{
    if(*ptr != '0')
        toValue += ((unsigned long long)1 << i);
}

printf("%d\n",toValue);