Преобразование из байта в ASCII в C - PullRequest
2 голосов
/ 02 апреля 2010

Может кто-нибудь предложить средства преобразования байтового массива в ASCII в C? Или преобразование байтового массива в шестнадцатеричный, а затем в ASCII?

[04/02] [Отредактировано]: Чтобы перефразировать его, я хочу преобразовать байты в шестнадцатеричные и сохранить преобразованные шестнадцатеричные значения в структуре данных. Как это сделать?

С уважением, Негр

Ответы [ 3 ]

3 голосов
/ 02 апреля 2010

Что ж, если вы интерпретируете целое число как char в C, вы получите этот символ ASCII, если он находится в диапазоне.

int i = 97;
char c = i;

printf("The character of %d is %c\n", i, c);

Печать:

The character of 97 is a

Обратите внимание, что проверка ошибок не выполняется - я предполагаю 0 <= i < 128 (диапазон ASCII).

В противном случае массив байтовых значений может быть напрямую интерпретирован как строка ASCII:

char bytes[] = {97, 98, 99, 100, 101, 0};

printf("The string: %s\n", bytes);

Печать:

The string: abcde

Обратите внимание на последний байт: 0, он необходим для правильного завершения строки. Вы можете использовать bytes как любую другую строку C, копировать из нее, добавлять ее в другие строки, проходить по ней, печатать и т. Д.

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

Прежде всего, вам следует уделить больше внимания формулировке своих вопросов. Трудно сказать то, что вы действительно хотите услышать. Я думаю, что у вас есть какой-то двоичный двоичный объект, и вы хотите, чтобы он был в удобочитаемой форме, например сбросить его на экран для отладки. (Я знаю, что, возможно, я вас здесь неправильно понимаю).

Например, snprintf(buf, sizeof(buf), "%.2x", byte_array[i]) можно использовать для преобразования одного байта в шестнадцатеричное представление ASCII. Вот функция выгрузки целой области памяти на экран:


void
hexdump(const void *data, int size)
{
    const unsigned char *byte = data;

    while (size > 0)
    {
        size--;
        printf("%.2x ", *byte);
        byte++;
    }
}
0 голосов
/ 02 апреля 2010

Char.s и Int.s хранятся в двоичном виде в C. И обычно могут использоваться вместо друг друга при работе в диапазоне ASCII.

int i = 0x61;
char x = i;

fprintf( stdout, "%c", x );

, который должен вывести «a» на экран.

...