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

相关文章

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

使用C#实现将RTF转换为PDF

《使用C#实现将RTF转换为PDF》RTF(RichTextFormat)是一种通用的文档格式,允许用户在不同的文字处理软件中保存和交换格式化文本,下面我们就来看看如何使用C#实现将RTF转换为PDF... 目录Spire.Doc for .NET 简介安装 Spire.Doc代码示例处理异常总结RTF(R

OFD格式文件及如何适应Python将PDF转换为OFD格式文件

《OFD格式文件及如何适应Python将PDF转换为OFD格式文件》OFD是中国自主研发的一种固定版式文档格式,主要用于电子公文、档案管理等领域,:本文主要介绍OFD格式文件及如何适应Python... 目录前言什么是OFD格式文档?使用python easyofd库将PDF转换为OFD第一步:安装 eas

基于Java实现PPT到PDF的高效转换详解

《基于Java实现PPT到PDF的高效转换详解》在日常开发中,经常会遇到将PPT文档批量或单文件转换为PDF的需求,本文将详细介绍其使用流程、核心代码与常见问题解决方案,希望对大家有所帮助... 目录一、环境配置Maven 配置Gradle 配置二、核心实现:3步完成PPT转PDF1. 单文件转换(基础版)

使用C#实现Excel与DataTable的相互转换

《使用C#实现Excel与DataTable的相互转换》在软件开发中,Excel文件和DataTable是两种广泛使用的数据存储形式,本文将介绍如何通过C#实现Excel文件与Data... 目录安装必要的库从 Excel 导出数据到 DataTable从 DataTable 导入数据到 Excel处理 E

利用Python将PDF文件转换为PNG图片的代码示例

《利用Python将PDF文件转换为PNG图片的代码示例》在日常工作和开发中,我们经常需要处理各种文档格式,PDF作为一种通用且跨平台的文档格式,被广泛应用于合同、报告、电子书等场景,然而,有时我们需... 目录引言为什么选择 python 进行 PDF 转 PNG?Spire.PDF for Python

Qt实现删除布局与布局切换功能

《Qt实现删除布局与布局切换功能》在Qt应用开发中,动态管理布局是一个常见需求,比如根据用户操作动态删除某个布局,或在不同布局间进行切换,本文将详细介绍如何实现这些功能,并通过完整示例展示具体操作,需... 目录一、Qt动态删除布局1. 布局删除的注意事项2. 动态删除布局的实现步骤示例:删除vboxLay

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进行转换前的准备通过