QT readyRead()函数,数据分包不完整解决办法

本来一组数据

01 03 34 06 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 77 EE 00 0F 3A 57 00 0F 3A 6E 00 0E AF 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 19 B0

接收时分成了2段

18:16:50:609\] 01 03 34 06 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 77 EE 00 0F 3A 57 00 0F 3A 6E 00 \[18:16:50:631\] 0E AF 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 19 B0这是实际接收情况,

  1. 使用 readBufferSize
    QSerialPort 类有一个 readBufferSize 参数,可以通过设置更大的缓冲区大小来减少数据分段接收的情况。你可以在初始化串口时设置这个值,例如:
c 复制代码
serialPort->setReadBufferSize(1024);  // 设置缓冲区大小为1024字节
  1. 使用 waitForReadyRead()
    如果你希望通过延迟一定时间后再判断是否读取完数据,可以使用 waitForReadyRead 方法,它可以等待一段时间,直到有数据可以读取:
c 复制代码
if (serialPort->waitForReadyRead(100)) {
    QByteArray data = serialPort->readAll();
    // 处理数据
}

其中 100 表示等待 100 毫秒。在这段时间内,如果有数据到达,会继续读取,减少数据被分段接收的可能性。

相关推荐
CoderCodingNo19 小时前
【GESP】C++五级练习题 luogu-P1182 数列分段 Section II
开发语言·c++·算法
青槿吖20 小时前
第二篇:告别XML臃肿配置!Spring注解式IOC/DI保姆级教程,从入门到真香
xml·java·开发语言·数据库·后端·sql·spring
t1987512820 小时前
TOA定位算法MATLAB实现(二维三维场景)
开发语言·算法·matlab
梦想的旅途220 小时前
如何通过 QiWe API 实现企业微信主动发消息
开发语言·python
jllllyuz20 小时前
粒子群算法解决资源分配问题的MATLAB实现
开发语言·算法·matlab
凌晨一点的秃头猪21 小时前
Python文件操作
开发语言·python
myloveasuka21 小时前
C++进阶:利用作用域解析运算符 :: 突破多态与变量隐藏
开发语言·c++
OxyTheCrack21 小时前
【C++】详细拆解std::mutex的底层原理
linux·开发语言·c++·笔记