Как конвертировать Hex в Ascii в C с использованием и без использования sprintf? - PullRequest
3 голосов
/ 26 апреля 2010

Я использовал strtol для преобразования строки в шестнадцатеричное, теперь мне нужно распечатать ее на экране. Я не уверен, что смогу использовать sprintf, поскольку у меня есть только 20 КБ памяти для использования на этой плате. Альтернативы приветствуются.

Ответы [ 3 ]

9 голосов
/ 26 апреля 2010

Чтобы сделать это вручную, проще всего иметь таблицу, сопоставляющую nybbles с ASCII:

static const char nybble_chars[] = "0123456789ABCDEF";

Затем, чтобы преобразовать байт в 2 шестнадцатеричных символа - при условии, что unsigned char является лучшим представлением для байта, но не делая предположений о его размере - извлеките каждый кусок и получите для него символ:

void get_byte_hex( unsigned char b, char *ch1, char *ch2 ) {
    *ch1 = nybble_chars[ ( b >> 4 ) & 0x0F ];
    *ch2 = nybble_chars[ b & 0x0F ];
}

Это прямо распространяется на более широкие типы данных и должно генерировать достаточно сжатый код для широкого спектра архитектур.

1 голос
/ 26 апреля 2010

Извлечение Коды форматирования , если ваша реализация C поддерживает это, должно быть легко печатать значения в шестнадцатеричном формате.

0 голосов
/ 26 апреля 2010

Проверьте вашу библиотеку C на ltoa - обратное значение strtol. Или напишите это с нуля (см. Ответ Броне).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...