我使用QSerialPort在Qt5.5(windows)中发送接收数据,除了在一种情况下,当发送回的数据包含0x11时,一切都按预期工作。我看到这是一个特殊的ascii值,但我想将其作为原始字节读取。我的设置如下:
setBaudRate(QSerialPort::Baud115200);
setDataBits(QSerialPort::Data8);
setStopBits(QSerialPort::OneStop);
setFlowControl(QSerialPort::SoftwareControl);
setParity(QSerialPort::NoParity);
稍后。。。
open(QIODevice::ReadWrite);
我在连接到readyRead()的插槽中的读数:
buffer_.append(readAll());
其中buffer_是QByteArray。
一个示例数据包是:
0xBF 0x00 0x00 0x00 0x00 0x04 0x11 0x00 0x02 0x70
我会收到的数据包:
0xBF 0x00 0x00 0x00 0x00 0x04 0x00 0x02 0x70
根据Kamil Klimek的说法,我改为无流量控制,它可以工作。
setFlowControl(QSerialPort::NoFlowControl);
0x11
和0x13
是软件流模式下的流控制字节。这就是0x11
被"丢弃"的原因。使用NoFlowControl
意味着您必须自己控制流量。也就是说,你不能在短时间内写入太多数据,因为你会丢失它。