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

相关推荐
Vitalia2 分钟前
从零开始学 Rust:基本概念——变量、数据类型、函数、控制流
开发语言·后端·rust
小禾苗_1 小时前
C++ ——继承
开发语言·c++
李长渊哦1 小时前
Java 虚拟机(JVM)方法区详解
java·开发语言·jvm
进击ing小白1 小时前
Qt程序退出相关资源释放问题
开发语言·qt
烂蜻蜓2 小时前
前端已死?什么是前端
开发语言·前端·javascript·vue.js·uni-app
老猿讲编程2 小时前
安全C语言编码规范概述
c语言·开发语言·安全
OrangeJiuce2 小时前
【QT中的一些高级数据结构,持续更新中...】
数据结构·c++·qt
程序员-King.4 小时前
【接口封装】——13、登录窗口的标题栏内容设置
c++·qt
Biomamba生信基地5 小时前
两天入门R语言,周末开讲
开发语言·r语言·生信
RAN_PAND5 小时前
STL介绍1:vector、pair、string、queue、map
开发语言·c++·算法