Как спрятать unsigned char?

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

unsigned char foo;
foo = 0x123;

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

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

не может преобразовать параметр 2 из 'unsigned char' to 'char'

Ответ 1

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

Ответ 2

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

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

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

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

Если вы не использовали printf вместо sprintf.

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

Ответ 3

ИЗМЕНИТЬ

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

Попробуйте следующее:

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

Ответ 4

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

Ответ 5

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

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

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

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