我正在使用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
答案 0 :(得分:1)
按照Kamil Klimek的说法,我改为无流量控制而且有效。
setFlowControl(QSerialPort::NoFlowControl);
答案 1 :(得分:0)
0x11
和0x13
是Sofware Flow模式下的流控制字节。这就是为什么0x11
被删除"。使用NoFlowControl
意味着您必须自己控制流量。即你不能在短时间内写出大量数据,因为你会失去它。