2012-11-26 91 views
2

我想將64位二進制字符串轉換爲64位整數(無符號)。是否有任何庫函數在C++中執行此操作?C++:二進制std ::字符串到十進制

編輯:

我用:

main() 
{ 
std::string st = "010111000010010011000100010001110110011010110001010111010010010110100101011001010110010101101010" ; 

uint64_t number; 
number = strtoull (st.c_str(),NULL,2); 
cout << number << " " ; 

char ch = std::cin.get(); 
cout << ch ; 


    return 0; 
} 
+0

你是什麼意思的「二進制字符串」?一個包含字符'0'和'1'的字符串? –

+0

@JerryCoffin,是的。 – alessandro

+4

你有96位。這比大多數C++實現支持的任何整數類型都大。 – nos

回答

8

可以使用strtoull()功能與基地2(有一個例子,如果你遵循的鏈接)。

+0

假設'unsigned long long'的大小是64位,這很可能。 – Gorpik

+0

@Gorpik這是最大的整型C/C++標準庫可以解析數字。 –

+0

@alessandro請發佈代碼,以便我們可以看到你做什麼和如何做。 –

0

您可以試試這個。如果你不需要它是通用的,你可以指定類型和數量做掉:

template <typename Number> 
Number process_data(const std::string& binary) 
{ 
    const Number * data_ptr; 
    Number data; 

    data_ptr = reinterpret_cast<const Number*>(binary.data()); 
    data = *data_ptr; 

    return data; 
} 
+0

上面假設'std :: string'用於保存二進制數據,這不太理想。人們通常對文本數據使用'std :: vector '作爲二進制數據,'std :: string'使用'std :: string'。 –

+0

它可能工作,但它不會通過代碼審查。以'std :: string'傳遞二進制數據最令人困惑。你不會將'int'作爲'void's傳遞給你,是嗎? –

3

如果你有C++ 11 - 您可以使用std::bitset例如。

#include <iostream> 
#include <bitset> 

int main() 
{ 
    const std::string s = "0010111100011100011"; 
    unsigned long long value = std::bitset<64>(s).to_ullong(); 
    std::cout << value << std::endl; 
} 

std::stoull

#include <iostream> 
#include <string> 

int main() 
{ 
    const std::string s = "0010111100011100011"; 
    unsigned long long value = std::stoull(s, 0, 2); 
    std::cout << value << std::endl; 
} 
1

下面的代碼可能是二進制字符串轉換爲它的整數值的最簡單方法。如果不使用biteset或者對任何長度的二進制字符串進行加速,

std::string binaryString = "10101010"; 
int value = 0; 
int indexCounter = 0; 
for(int i=binaryString.length()-1;i>=0;i--){ 

    if(binaryString[i]=='1'){ 
     value += pow(2, indexCounter); 
    } 
    indexCounter++; 
} 
相關問題