2013-10-19 3 views
7

Есть ли простой способ конвертировать двоичный бит в шестнадцатеричный? Функция будет использоваться в классе CRC и будет использоваться только для стандартного вывода.Преобразование двоичного двоичного бита в шестнадцатеричное (C++)

Я подумал об использовании to_ulong() для преобразования битового набора в целое число, а затем преобразование целых чисел 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

Я действительно прошу относительно простой способ преобразования битового набора в шестнадцатеричное значение и затем возврат значения к вызову функции. – navig8tr

+1

«Я просто прошу относительно простой способ преобразования битового набора в шестнадцатеричное значение, а затем возврат значения к вызову функции». В какой форме вы хотели бы вернуть это шестнадцатеричное значение? Не работает ли 'std :: string'? Вы попробовали мой ответ? Он сделал то, что вы надеялись сделать? – dasblinkenlight

ответ

6

Вы можете отправить вывод в std::stringstream, а затем возвращает результирующую строку вызывающей:

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

Это произведет результат типа std::string.

+0

Это отлично работает. Благодаря dasblinkenlight. Теперь мне просто нужно преобразовать строчные буквы в верхний регистр. – navig8tr

+0

@ navig8tr [Этот ответ] (http://stackoverflow.com/a/735215/335858) рассказывает вам, как это сделать. – dasblinkenlight

+2

Mmm. Почему «заглавными»? Разве '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 
Смежные вопросы