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

相关文章

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源