QSerialPort クラスを使用して、シリアル ポートの読み取りと書き込みを試みています。現在、eltima ドライバーによって実装された仮想コンポートを使用しています。次のようなバイトを正常に送信できます。
QSerialPortInfo info = QSerialPortInfo("COM30");
QSerialPort serial;
serial.setPort(info);
serial.setBaudRate(57600);
serial.open(QIODevice::ReadWrite);
char arr[] = {0xAA, 0xBB, 0xCC, 0xDD};
serial.write(arr, 4);
私はこのように読み取ろうとしています (1 バイトだけを読み取りたいです。データを読み取る準備ができている場合、このコードはタイマーによって呼び出されます):
virtual uint8_t getByte(void)
{
char arr[2] = {0};
int8_t err = qPort.read(arr, 1);
DEBUG_ASSERT(err != -1);
if(! isNewByte() )
{
onReceiveFinished();
}
return arr[0];
}
仮想ポート (つまり、プログラム) に 128 未満の値を送信すると、(デバッガーが示すように) 正しい値になります。ただし、128 以上を送信しようとすると、値 -128 o_o が返されます (153 を送信すると、-25 や 103 ではなく 25 になります)。それは私には本当に奇妙に思えます。間違いがどこにあるのか誰にもわかりますか?