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

相关文章

使用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模块没有目录

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC