C++ QT_数据转换(数值、QString、QByteArray、结构体)

news/2025/11/15 22:37:02/文章来源:https://www.cnblogs.com/sheriffe/p/19204472

目录
  • 1. 基础类型互转
    • 数值 ↔ QString
    • bool ↔ QString
  • QString 与 QByteArray 互转
  • 结构体与 QByteArray 互转

1. 基础类型互转

数值 ↔ QString

    //int → QStringint intVal = 255;  QString strInt1 = QString::number(intVal); // 十进制:"255"  QString strInt2 = QString::number(intVal, 16); // 十六进制小写:"ff"  QString strInt3 = QString::number(intVal, 16).toUpper(); // 十六进制大写:"FF"  setNum()亦可,均可实现有无符号转QString
    //QString→ intQString qstr = "10086";int num = qstr.toInt(); // num=10086//QString→ uint转无符号类型使用toUInt();

bool ↔ QString

    // 1. bool → QString// 方法1bool flag = true;QString qstrBool = flag ? QString("true") : QString("false");// 方法2bool test = true;QString s = QString::number(test);// 方法3bool bInput = false;QString s = QVariant(bInput).toString();// 2. QString → boolQString s = "true";bool bInUse = QVariant(s).toBool();

QString 与 QByteArray 互转

QString 是 Unicode 文本容器(UTF-16),QByteArray 是原始字节容器(8 位),互转核心是编码映射,需显式指定编码避免乱码。

  • QString → QByteArray
    #include <QString>  #include <QByteArray> #include <QTextCodec>  QString qstr = "QT字符串转字节数组:中文测试";  // 1. 转UTF-8编码(推荐:网络传输、跨平台文件)  QByteArray utf8Arr = qstr.toUtf8();  // 用途:QTcpSocket发送、QFile写入(UTF-8文件)  // 2. 转系统本地编码(如Windows GBK、Linux UTF-8,慎用跨平台)  QByteArray localArr = qstr.toLocal8Bit();  // 3. 转GBK编码(需显式指定编解码器,用于旧系统交互)  QTextCodec* gbkCodec = QTextCodec::codecForName("GBK");  if (gbkCodec){  QByteArray gbkArr = gbkCodec->fromUnicode(qstr); // GBK编码字节  }  
  • QByteArray → QString
    // 1. UTF-8字节 → QString(对应toUtf8())  QByteArray utf8Arr = "\xE4\xB8\xAD\xE6\x96\x87\xE6\xB5\x8B\xE8\xAF\x95"; // UTF-8编码的"中文测试"  QString qstr1 = QString::fromUtf8(utf8Arr); // 正确解析:"中文测试"  // 2. GBK字节 → QString(对应fromUnicode())  QByteArray gbkArr = "\xD6\xD0\xCE\xC4\xB2\xE2\xCA\xD4"; // GBK编码的"中文测试"  QTextCodec* gbkCodec = QTextCodec::codecForName("GBK");  if (gbkCodec) {  QString qstr2 = gbkCodec->toUnicode(gbkArr); // 正确解析:"中文测试"  }  // 3. 二进制字节 → 十六进制文本(用于日志/协议解析)  QByteArray binaryArr = QByteArray::fromRawData("\x01\x02\xFF\xFE", 4); // 二进制数据  QString hexStr = binaryArr.toHex().toUpper(); // 转十六进制文本:"0102FFFE"  

结构体与 QByteArray 互转

1、结构体转换QByteArray

    /*** @brief 结构体转QByteArray(通用函数)* @tparam T 结构体类型(必须是POD类型,不含指针)* @param structData 输入的结构体对象* @return 转换后的QByteArray*/template <typename T>static QByteArray structToByteArray(const T& structData) {QByteArray byteArray;// 预留结构体大小的空间(字节数 = 结构体大小)byteArray.resize(sizeof(T));// 将结构体的内存数据拷贝到QByteArraystd::memcpy(byteArray.data(), &structData, sizeof(T));return byteArray;}

2、QByteArray转换结构体

/*** @brief QByteArray转结构体(通用函数)* @tparam T 结构体类型(必须是POD类型,不含指针)* @param byteArray 输入的QByteArray* @param structData 输出的结构体对象(引用)* @return 转换是否成功(true:成功;false:字节数组大小不匹配)*/template <typename T>static bool byteArrayToStruct(const QByteArray& byteArray, T& structData) {// 校验字节数组大小是否与结构体大小一致(避免内存越界)if (byteArray.size() != static_cast<int>(sizeof(T))) {qWarning() << "转换失败:字节数组大小(" << byteArray.size()<< ")与结构体大小(" << sizeof(T) << ")不匹配!";return false;}// 将字节数组的数据拷贝到结构体std::memcpy(&structData, byteArray.data(), sizeof(T));return true;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/966545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LNCPC 2025 游寄

LNCPC 2025 游记热身赛 没去,因为期中考试 TAT. jsh 和 sr 替我报了道,然后我在火车上胡做法。 C 是显然 greedy,D 是一个不知道什么东西。 然后铸币蒟蒻凭借惊人的注意力想到了在二进制上转换做数位 dp,但是时间不…

第3章 传统项目管理在AI中的局限

第3章 传统项目管理在AI中的局限第3章 传统项目管理在AI中的局限本章简介在深刻理解了AI项目的核心特征后,本章将系统性地审视传统项目管理框架在面对这些特征时所暴露出的不适应性。目的在于并非全盘否定经典方法——…

Python 异常处理全面详解(附丰富实例)

Python 异常处理全面详解(附丰富实例) 异常是程序运行时出现的意外错误(如除数为零、文件不存在等),若不处理会导致程序崩溃。Python 提供了完善的异常处理机制,允许开发者捕获并处理这些错误,保证程序的健壮性…

IServiceCollection和IServiceProvider

ServiceCollection 和 ServiceProvider 是 .NET 依赖注入系统中的两个核心概念,但它们的职责完全不同。理解这两个概念对看懂 ASP.NET Core / ABP 框架的 DI 机制非常重要。 下面用非常清晰、分层方式给你解释:✔️ …

multisim 13 Problem: Accessing the database解决办法

删除这个文件夹重新打开即可C:\Users\zengf\AppData\Roaming\National Instruments\Circuit Design Suite\13.0\config

完整教程:Redis 事务机制:Pipeline、ACID、Lua脚本

完整教程:Redis 事务机制:Pipeline、ACID、Lua脚本pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

Python 一维数据、二维数据及 CSV 文件操作全解析(附实例)

Python 一维数据、二维数据及 CSV 文件操作全解析(附实例) 在数据处理中,一维数据和二维数据是最基础的数据结构。CSV(逗号分隔值)作为一种轻量级文件格式,是存储和交换这两类数据的常用载体。本文将系统讲解一维…

银行核心账户体系、账务设计、会计核心(整合版)

开头先和读过的朋友道个歉,因为某些原因(​先不说​),文章需要重新发一遍,同时新发的内容有大幅增加,请仔细阅读不要遗漏。结合以前发过很多相关知识,今天将科目、账户、账务、会计串起来讲一讲,让整个知识体系…

斐波那契数列相关恒等式

前置规定 \(F_0=0,F_1=1,F_i=F_{i-1}+F_{i-2}\) 公式部分\(\sum_{i=1}^n F_i=F_{n+2}-1\) \(\sum_{i=1}^n F_{2i-1}=F_{2n}\) \(\sum_{i=1}^n F_{2i}=F_{2n+1}-1\) \(\sum_{i=1}^n F_i^2=F_nF_{n+1}\)

Python 文件操作全面详解:从基础到进阶(附丰富实例)

Python 文件操作全面详解:从基础到进阶(附丰富实例) 文件操作是 Python 编程中最核心的技能之一,涵盖文件的创建、读写、关闭、删除、属性修改等场景。本文将系统梳理 Python 文件操作的核心概念、基础 API、进阶技…

银行中外汇的由来(金融产品经理必读)

经常听到我们国家有多少多少亿美元的外汇储备,是否有这样的疑问,外汇储备是什么,它又是怎么来的,银行又是如何处理外汇储备的,今天就闲聊一下。 外汇管理 常见概念 现汇: 通俗来讲,就是在银行账户里可以自由买卖…

AI元人文框架:意义世界的探索引擎

AI元人文框架:意义世界的探索引擎基础层:价值原语 •定义:将复杂人类现象分解为基本价值单元(如【公平】【忠诚】【卓越】) •作用:构建意义世界的"化学元素周期表",实现价值的解析与重组环境层:多维…

abc432

AC 3 (ABF), Score 750, Penalty 47:35, Rank , Ranting .攒 rp。CCPC 济南站 rp++。 C 这是什么!怎么这么困难!思考 20min 无果于是跳了。 看榜,怎么这么抽象,C<E<FG<D 是什么东西( 开 E,发现直接线段…

20232310 2025-2026-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 1.1域名与IP信息搜集分析;1.2社交网络IP地址获取与地理位置定位;1.3靶机环境扫描探测、漏洞评估与攻击路径分析;1.4搜索个人网上足迹与高级搜索技能实践。2.实验目的 学习使用搜索引擎、扫描引擎、扫描工…

实用指南:开源 Linux 服务器与中间件(七)数据库--MySQL

实用指南:开源 Linux 服务器与中间件(七)数据库--MySQL2025-11-15 22:15 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important…

版本控制与GitLab完整实践指南 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

利用Myo臂环采集肌电信号和角速度来建立实时手势识别

利用Myo臂环采集肌电信号和角速度来建立实时手势识别pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

[MySQL] 基础操控

[MySQL] 基础操控2025-11-15 21:55 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fami…

公告栏

rt公告 关于密码 可能会有些东西较消极或观点较偏激,所以设个象征性密码。 象征性密码:mn 如果不是可以私信问我,只要我对你印象不差一般都能给(除了个别文章)。 关于玩笑 感觉好像有时我的玩笑话对方也会当真,是…