Как спринтовать неподписанный символ?
Это не работает:
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
Я получаю эту ошибку:
Не удается преобразовать параметр 2 из 'unsigned char' to 'char'
5 ответов:
Прежде чем перейти к рассмотрению неподписанных символов, вызывающих проблему, внимательно посмотрите на эту строку:
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);
Данные могут быть усечены, но это определенно предпочтительнее, чем переполнение буфера.