У меня есть этот простой код, который использует QtSerialPort:
char foo[] = {130,50,'\0'};
serial->write(foo);
Результат моего сериала {2, 50}. Я думаю, что самое большое число, которое я могу послать, — 128 (символ идет от -128 до 128). Где способ отправки номера от 0 до 255? Я пытаюсь использовать unsigned char, но метод «write» не работает с ним. Та же проблема возникает и с QByteArray.
Спасибо вам всем.
Интерфейс QIODevice имеет символ по умолчанию для отправки, который может зависеть от компилятора. Смотрите документацию для деталей.
qint64 QIODevice :: write (const char * data, qint64 maxSize)
Записывает не более maxSize байтов данных из данных на устройство. Возвращает количество байтов, которые были фактически записаны, или -1, если произошла ошибка.
Тем не менее, вы не должны беспокоиться, если вы принимаете данные правильно с другой стороны. вы все равно можете отправить более 128 значений как подписанные, но они будут выглядеть как отрицательные значения, например 0xFF будет -1.
Если вы принимаете ту же логику в обратном порядке на принимающей стороне, проблем не должно быть.
Тем не менее, это не относится к вашей проблеме, потому что вы не получите соответствующее отрицательное значение для 130, но вы получите его на 7 бит. Убедитесь, что ваше соединение 8 бит данных.
Вы можете установить это явно после открытия порта следующим кодом:
QSerialPort serialPort;
QString serialPortName = "foo";
serialPort.setPortName(serialPortName);
if (!serialPort.open(QIODevice::WriteOnly)) {
standardOutput << QObject::tr("Failed to open port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
if (!serialPort.setDataBits(QSerialPort::Data8)) {
standardOutput << QObject::tr("Failed to set 8 data bits for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
// Other setup code here
char foo[] = {130,50,'\0'};
serialPort.write(foo);
Убедитесь, что вы установили последовательный порт для отправки 8 бит, используя QSerialPort :: бит данных
Тот факт, что «130» следует как «2», означает, что самый значимый бит усекается.