QT中结构体和QbyteArray的转换,可加帧头帧尾

2024-03-06 08:44

本文主要是介绍QT中结构体和QbyteArray的转换,可加帧头帧尾,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

demo源码:


#include <QApplication>
#include <QDebug>
#include <QByteArray>// 头
typedef struct tagEXT_HEADER
{unsigned short  type = 0x5642;
}EXT_HEADER;// 数据包格式
typedef struct tagMsgFormat
{EXT_HEADER                  header;uint8_t                     msgId = 0x00;uint8_t                     msgNum= 0;uint16_t                    payloadLen = 0;//                          payload;  // 长度不固定
}MsgFormat;int main(int argc, char *argv[])
{// 创建结构体数据EXT_HEADER header;MsgFormat  format;format.msgId = 0x20;format.msgNum= 99;format.payloadLen = 16;// 直接导入QByteArray数据QByteArray data = QByteArray::fromStdString("\x01\x02\x03\x04\x05\x06");qDebug()<< "data:" << data.toHex();// 结构体转QByteArray数据QByteArray frame = QByteArray((char *)&header, sizeof(EXT_HEADER));qDebug()<< "frame:" << frame.toHex();// 修改结构体数据,然后转QByteArray数据header.type = 0x3412;QByteArray frame2 = QByteArray((char *)&header, sizeof(EXT_HEADER));qDebug()<< "frame2:" << frame2.toHex();// 嵌套式结构体转QByteArray数据QByteArray frame3 = QByteArray((char *)&format, sizeof(MsgFormat));qDebug()<< "frame3:" << frame3.toHex();// QByteArray数据转嵌套式结构体MsgFormat *cmd = (MsgFormat*)frame3.data();qDebug()<<"";qDebug()<<"frame3转为结构体之后的数据:";qDebug()<< "header:" << cmd->header.type;qDebug()<< "msgId:" << (uint8_t)(cmd->msgId);qDebug()<< "msgNum:" << cmd->msgNum;qDebug()<< "palyloadLen:" << cmd->payloadLen;// QByteArray数据只取帧头EXT_HEADER *cmdHeader = (EXT_HEADER*)frame3.data();qDebug()<< "header:" << cmdHeader->type;return 0;
}

打印结果:

data: "010203040506"
frame: "4256"
frame2: "1234"
frame3: "425620631000"frame3转为结构体之后的数据:
header: 22082
msgId: 32
msgNum: 99
palyloadLen: 16
header: 22082

这篇关于QT中结构体和QbyteArray的转换,可加帧头帧尾的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779465

相关文章

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Java轻松实现PDF转换为PDF/A的示例代码

《Java轻松实现PDF转换为PDF/A的示例代码》本文将深入探讨Java环境下,如何利用专业工具将PDF转换为PDF/A格式,为数字文档的永续保存提供可靠方案,文中的示例代码讲解详细,感兴趣的小伙伴... 目录为什么需要将PDF转换为PDF/A使用Spire.PDF for Java进行转换前的准备通过

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录