2013-10-19 142 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 
相关问题