Преобразовать двоичную строку в шестнадцатеричную строку C

#c #string #binary #char #hex

#c #строка #двоичный #символ #шестнадцатеричная

Вопрос:

Как сказано в названии, меня интересовал наилучший способ преобразования двоичной строки в шестнадцатеричную строку на C. Двоичная строка не более 4 бит, поэтому преобразование в один шестнадцатеричный символ было бы наилучшим.

Спасибо за любую помощь, я не уверен, что есть что-то встроенное, чтобы упростить это, поэтому пока не предпринимаю попыток опубликовать.

Комментарии:

1. Что вы подразумеваете под «лучшим»? Самый быстрый? Самый простой код?

2. @samgak Извините, проще всего, не будучи ужасно низкой производительностью. Не слишком беспокоясь о производительности. Спасибо

3. Ваш вопрос слишком широкий и не по теме. StackOverflow не является сервисом кодирования.

4. @2501 Как новичку в C, мне было действительно интересно, есть ли что-то встроенное, чтобы упростить это, в отличие от написания моей собственной функции. Спасибо за ваше мнение, хотя

5. преобразовать двоичную строку в int с помощью atoi с основанием 2, а затем int в шестнадцатеричную строку с помощью sprintf

Ответ №1:

Вы можете использовать strtol для преобразования двоичной строки в целое число, а затем sprintf для преобразования целого числа в шестнадцатеричную строку:

 char* binaryString = "1101";

// convert binary string to integer
int value = (int)strtol(binaryString, NULL, 2);

// convert integer to hex string
char hexString[12]; // long enough for any 32-bit value, 4-byte aligned
sprintf(hexString, "%x", value);

// output hex string
printf(hexString);
 

Вывод:

 d
 

Если гарантируется, что это будет один шестнадцатеричный символ, просто возьмите hexString[0] .