gpt4 book ai didi

c++ - QSerialPort 单独读取十六进制值

转载 作者:行者123 更新时间:2023-11-28 05:48:17 25 4
gpt4 key购买 nike

我正在使用 Qt 的 QSerialPort 库与 RS232 通信。我将 ReadyRead 信号连接到我的 readData() 插槽;

connect(comms,SIGNAL(readyRead()),this,SLOT(readData()));

当我发送像“Hello World!”这样的字符串时我可以使用 comms.readAll() 读取所有数据,并且 comms.bytesAvailable() 返回 12。

但是当我发送“Hello World!\n\r”时,它显示为“Hello World!”和“\n\r”分开,comms.bytesAvailable() 首先返回 12,然后返回 2。

当我发送像(没有空格)这样的十六进制字节时,情况会变得更糟

0x0F 0x00 0x43 0x11 0x00 0x04 0x11 0x00 0x02 0x70

它正确读取值,但一次读取 1 或 2 个字节。我尝试了 waitForRead() 但这没有帮助。

即使不是标准字母,我如何一次读取所有传入字节?

最佳答案

尝试在字节可用时从端口读取:

if (f_port->bytesAvailable()) {   // If there are bytes available  
QByteArray f_data; // data container
f_data.clear();

if (f_port->open(QIODevice::ReadWrite)) { // Try to open the port
while(f_port->bytesAvailable()) { // Reading loop
f_data.append(f_port->readAll());
}

f_port->flush();
f_port->close();
}
qDebug() << f_data; // Check the result
}

关于c++ - QSerialPort 单独读取十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35791731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com