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

相关推荐
Ulyanov10 分钟前
基于Impress.js的3D概念地图设计与实现
开发语言·前端·javascript·3d·ecmascript
A南方故人15 分钟前
一个用于实时检测 web 应用更新的 JavaScript 库
开发语言·前端·javascript
JosieBook16 分钟前
【WinForm】使用C# WinForm实现带有托盘图标功能的应用程序
开发语言·c#
阿kun要赚马内17 分钟前
Qt写群聊项目(一):服务器
服务器·数据库·qt
2301_7903009618 分钟前
C++与量子计算模拟
开发语言·c++·算法
青灯照颦微24 分钟前
【R】三种方式安装R包
开发语言·r语言
野生技术架构师32 分钟前
深度拆解JVM垃圾回收:可达性分析原理+全类型回收器执行机制
java·开发语言·jvm
缺点内向33 分钟前
在 C# 中为 Word 段落添加制表位:使用 Spire.Doc for .NET 实现高效排版
开发语言·c#·自动化·word·.net
中科院提名者34 分钟前
如何配置go环境并用vscode运行
开发语言·后端·golang
电饭叔39 分钟前
GUI by Python 6 一段 gui 代码分析
开发语言·python