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 毫秒。在这段时间内,如果有数据到达,会继续读取,减少数据被分段接收的可能性。

相关推荐
第九序言T7 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
龙亘川8 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人8 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
Raas1009 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
专注仿真10 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
jimy110 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
呆呆虫1211 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
心疼你的一切11 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
Wang's Blog12 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
中科三方13 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php