QSerialPort读取有符号值

时间:2013-06-06 13:02:58

标签: c++ qt serial-port

我正在尝试使用QSerialPort类来读取和写入串行端口。 现在我正在使用eltima驱动程序实现的虚拟comports。 我可以像这样成功发送字节:

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);

我正在尝试这样读(我只想读取一个字节;如果数据已准备好被读取,则此代码由定时器调用):

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或更多,我得到值-12 o_o(如果我发送153 - 我得到25.不是-25或103)。 这对我来说似乎很奇怪。 任何人都可以看到错误在哪里?

2 个答案:

答案 0 :(得分:0)

我的错误真是太愚蠢了。默认情况下,QSerialPort设置为7个数据位(实际上看起来不太实用),因此每个接收到的字节都会切断MSB(如减去128)。

然而,奇怪的是,发送工作正常。

答案 1 :(得分:0)

不。你错了做setBaudRate()。它需要在端口打开后进行。