0

我使用字符串来包含我的 64 位二进制文​​件。

string aBinary;
aBinary = "100011111011101100000101101110000100111000011100100100110101100";

最初我试过这个..

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

cout << buffer << endl;

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

4

2 回答 2

1

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

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

于 2013-05-13T03:39:47.530 回答
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);
于 2013-05-13T03:44:07.367 回答