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

问题描述:

我使用字符串来包含我的64位二进制。C++将二进制(64位)转换为十进制

string aBinary; 
aBinary = "100011111011101100000101101110000100111000011100100100110101100"; 

起初,我尝试了一些二进制这个..

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

cout << buffer << endl; 

的工作,但是这一次它不工作。我怎样才能将包含在一个字符串容器中的上述64位二进制转换为一个字符串容器的十进制。

+2

你可能想尝试'to_ullong'。 – chris 2013-05-13 03:35:43

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

C++ - 11引入了函数to_ullong(),这是你想要的。如果你没有,你可以尝试将你的字符串分成两部分,得到两个32位数字,转换为64位,做一个移位和一个添加。

也许你可以使用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); 
+0

下一次,请尝试详细说明你在做什么,谢谢! – Zyerah 2013-05-13 04:01:50

+0

抱歉。 – Rick 2013-05-13 05:34:22