2013-10-19 287 views
7

是否有將二進制位集轉換爲十六進制的簡單方法?該功能將用於CRC類,並僅用於標準輸出。將二進制位集轉換爲十六進制(C++)

我想過使用to_ulong()將bitset轉換爲整數,然後使用開關大小將整數10-15轉換爲A-F。不過,我正在尋找一些更簡單的東西。

我發現在互聯網上驗證碼:

#include <iostream> 
#include <string> 
#include <bitset> 

using namespace std; 
int main(){ 
    string binary_str("11001111"); 
    bitset<8> set(binary_str); 
    cout << hex << set.to_ulong() << endl; 
} 

它的偉大工程,但我需要輸出存儲在一個變量,然後將其返回到函數調用,而不是直接將其發送到標準輸出。

我試着改變代碼,但仍然遇到錯誤。有沒有辦法改變代碼來存儲十六進制值的變量?或者,如果有更好的方法可以做到這一點,請告訴我。

謝謝。

+0

那麼你真的問的是..如何獲得一些'無符號long'的十六進制表示爲一個字符串? –

+0

我真的只是要求一個相對簡單的方法將bitset轉換爲十六進制值,然後將該值返回給函數調用。 – navig8tr

+1

「我真的只是要求一個比較簡單的方法將bitset轉換爲十六進制值,然後將該值返回給函數調用。」您希望以什麼形式返回該十六進制值?不會'std :: string'工作嗎?你試過我的回答嗎?它做了你想做的事情嗎? – dasblinkenlight

回答

6

您可以將輸出發送到std::stringstream,然後將得到的字符串返回給調用者:

stringstream res; 
res << hex << uppercase << set.to_ulong(); 
return res.str(); 

這將產生std::string類型的結果。

+0

這很好。謝謝dasblinkenlight。現在我只需要將小寫字母轉換爲大寫。 – navig8tr

+0

@ navig8tr [This answer](http://stackoverflow.com/a/735215/335858)告訴你如何去做。 – dasblinkenlight

+2

嗯。爲什麼要'大寫'? 'std :: uppercase'不會更簡單嗎? 'sstr << std :: showbase << std :: uppercase << std :: hex << 42 << "\n";' ->'0x2A' – sehe

2

這是對C的替代:

unsigned int bintohex(char *digits){ 
    unsigned int res=0; 
    while(*digits) 
    res = (res<<1)|(*digits++ -'0'); 
    return res; 
} 

//... 

unsigned int myint=bintohex("11001111"); 
//store value as an int 

printf("%X\n",bintohex("11001111")); 
//prints hex formatted output to stdout 
//just use sprintf or snprintf similarly to store the hex string 
相關問題