Как спринтовать неподписанный символ?


Это не работает:

unsigned char foo;
foo = 0x123;

sprintf("the unsigned value is:%c",foo);

Я получаю эту ошибку:

Не удается преобразовать параметр 2 из 'unsigned char' to 'char'

5 13

5 ответов:

Use printf() formta string'S %u:

printf("%u", 'c');

Прежде чем перейти к рассмотрению неподписанных символов, вызывающих проблему, внимательно посмотрите на эту строку:

sprintf("the unsigned value is:%c",foo);

Первым аргументом sprintf всегда является строка, в которую будет выведено значение. Эта строка должна выглядеть примерно так:

sprintf(str, "the unsigned value is:%c",foo);

Если только вы не имели в виду printf вместо sprintf.

После исправления этого вы можете использовать %u в строке формата для вывода значения типа без знака.

EDIT

snprintf это немного безопаснее. Это зависит от разработчика, чтобы обеспечить правильный размер буфера используется.

Попробуйте это :

char p[255]; // example
unsigned char *foo;
...
foo[0] = 0x123;
...
snprintf(p, sizeof(p), " 0x%X ", (unsigned char)foo[0]);

Я думаю, что вы путаете с тем, как sprintf работает. Первый параметр-это буфер строк, второй-строка форматирования, а затем переменные, которые вы хотите вывести.

Не следует использовать sprintf, так как он может легко вызвать переполнение буфера.

Вы должны предпочесть snprintf (или _snprintf при программировании с помощью стандартной библиотеки Microsoft C). Если вы выделили буфер на стеке в локальной функции, вы можете сделать:

char buffer[SIZE];
snprintf(buffer, sizeof(buffer), "...fmt string...", parameters);

Данные могут быть усечены, но это определенно предпочтительнее, чем переполнение буфера.