2013-05-13 3 views
0

Я использую строку, содержащую биты в 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

ответ

1

Это переполнение, потому что to_ulong() 32-бит.

C++ - 11 вводит функцию to_ullong(), которая является тем, что вы хотите. Если у вас этого нет, вы можете попробовать разбить строку на две части, получить два 32-разрядных номера, конвертировать в 64-разрядные, сделать смену и добавить.

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); 
+0

В следующий раз, пожалуйста, попробуйте уточнить, что вы делаете, спасибо! – Zyerah

+0

извините за это. – Rick

Смежные вопросы