Первый фрагмент кода должен выдавать 58
, но вы не выводите новую строку, поэтому любой последующий вывод будет отображаться сразу после 58
.Возможно, вы вывели 86
в коде, который следует за фрагментом.Разместите полную программу, которая демонстрирует оскорбительное поведение, или измените формат на %x\n
, чтобы отделить 58
от последующего вывода.
Технически, printf
ожидает аргумент unsigned int
для преобразования %x
формат, но значение int
должно работать нормально, а test_payload[0]
повышается до int
и передается как таковое printf
.Вы можете попробовать изменить формат на %hhx
или привести аргумент к (unsigned int)test_payload[0]
, но было бы очень удивительно , что только одно из этих изменений решило проблему.
РЕДАКТИРОВАТЬ: из вашей дополнительной информации, похоже, что компилятор для вашей встроенной цели очень своеобразен.Определенно попробуйте привести аргументы как в
printf("%x\r\n", (unsigned int)test_payload[0]);
Заметив, что printf("%x\n\r", test_payload[0] + test_payload[1]);
, кажется, работает нормально, проблема не в том, чтобы передать int
вместо unsigned int
, что было бы достаточно плохо ..Кажется, printf()
передает uint8_t
значения неправильно, несоответствующим образом.
Еще один потенциальный источник проблем - если вы забыли включить <stdio.h>
и вызываете printf
без определения спрототип.Стандарт C ( 6.5.2.2 Вызовы функций ) явно определяет этот вызов как неопределенное поведение, если функция определена (в библиотеке) с прототипом, включающим многоточие (* 1039)*).