Интерфейс QIODevice имеет символ по умолчанию для отправки, который может быть зависимым от компилятора. Подробнее см. В документации.
qint64 QIODevice :: записи (Const символ * данные, 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);
В этом цитируемом фрагменте не указано, должны ли данные быть подписаны или нет, он полагается на способ компиляции вместо 'char', который может быть подписан или без знака. –
@JoachimPileborg: хорошо поймать, исправлено, спасибо. – lpapp
Мои ошибки в том, что я предположил, что серийный номер по умолчанию 8 бит. Теперь он работает нормально. – Elia