Я пытаюсь отправить некоторые данные к устройству с помощью последовательной коммуникации:Как поместить uint8_t в массив символов?
void VcpBridge::write_speed(char address, int spd) {
uint8_t speed = (uint8_t)(127);
ROS_ERROR("VCP BRIDGE: Sending %u to %u", speed, address);
char msg[8];
char command = 0x55, size = 0x02, csum;
csum = speed + 0x64 + address;
sprintf(msg, "%c%c%c%c%c%c", command, address, speed, size, 0x64, csum);
ROS_ERROR(msg);
write(fd_, msg, 6);
}
ROS_ERROR
здесь делает то же самое, как printf
.
Все работает нормально, за исключением случаев, когда значение speed
составляет более 127. Затем оно всегда печатает ?
в его положении, и устройство не получает правильную информацию. Знаете ли вы, как правильно это сделать? Я пробовал %u
, но потом программа вылетает.
Вы пытаетесь напечатать 'speed' как' char'? Что вы ожидаете получить, когда он равен, скажем, '200'? –
Предполагаю, что вы воспользовались некоторым кодом для примера, но в случае, если вы этого не сделали, вы понимаете, что никогда не добавляете какие-либо значения в 'msg', прежде чем будете писать()' it, не так ли? ? Кроме того, возможно, вы должны заменить все 'char' 'unsigned char's (или' uint8_t', который обычно является просто псевдонимом для того же ...). – twalberg
@twalberg Он сделал, с 'sprintf (msg, ...);' –