Это не работает:
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
Я получаю эту ошибку:
не может преобразовать параметр 2 из 'unsigned char' to 'char'
Это не работает:
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
Я получаю эту ошибку:
не может преобразовать параметр 2 из 'unsigned char' to 'char'
printf ( "% u", 'c');
Прежде чем вы начнете смотреть на неподписанные символы, вызывающие проблему, более внимательно посмотрите на эту строку:
sprintf("the unsigned value is:%c",foo);
Первый аргумент sprintf - это всегда строка, на которую будет напечатано значение. Эта строка должна выглядеть примерно так:
sprintf(str, "the unsigned value is:%c",foo);
Если вы не использовали printf вместо sprintf.
После того, как вы исправили это, вы можете использовать% u в строке формата, чтобы распечатать значение неподписанного типа.
ИЗМЕНИТЬ
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 при программировании в стандартной библиотеке C Microsoft). Если вы выделили буфер в стеке в локальной функции, вы можете сделать:
char buffer[SIZE];
snprintf(buffer, sizeof(buffer), "...fmt string...", parameters);
Данные могут быть усечены, но это определенно предпочтительнее переполнения буфера.