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

相关推荐
大可不必了8 小时前
03 函数定义和调用
开发语言·python
I_belong_to_jesus8 小时前
C++关于分支预测的优化1
开发语言·c++·算法
承渊政道9 小时前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛9 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
eggwyw11 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
another heaven15 小时前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
SomeOtherTime16 小时前
Rust 闭包语法和原理(AI回答)
开发语言·后端·rust
apcipot_rain17 小时前
C++转Java日记(10)
java·开发语言
总要学点什么17 小时前
第105篇:三维特效-流动图片墙体效果——让箭头沿墙长滚,它俩竟是同一份代码
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
xiaoye-duck18 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型