Если ваши данные представляют собой просто шестнадцатеричное значение, которое вы хотите отправить (в отличие от строки в шестнадцатеричном формате), вы, вероятно, захотите использовать «% c», а не «% x». При заданном значении данных (например, 0x65) «% x» будет выдавать два байта на последовательном порту: «6» (значение 54 ascii) и «5» (значение 53 ascii). "% c" выдаст один байт на последовательный порт: 'e' (значение ascii 100 или 0x65).
Что касается отправки данных на последовательный порт в C, взгляните на CSerial или CSerialPort : они могут немного упростить для вас вещи (обратите внимание, что я не Я использую их, как правило, я делаю приложения с последовательным портом в Python с модулем pyserial или в wxWidgets с библиотекой ctb ).
Редактировать: еще один, который довольно хорошо (я использовал его раньше, но не смог найти ссылку, когда я писал оригинальный пост) это CSerialFile , часть WFC библиотеки. Как я уже сказал, я обычно использую wxWidgets, но если вы используете базовые классы Microsoft, CSerialFile делает последовательный доступ очень простым.