当前位置: 首页 > news >正文

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

目录
  • 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.zskr.cn/news/50673.html

相关文章:

  • 第3章 传统项目管理在AI中的局限
  • multisim 13 Problem: Accessing the database解决办法
  • AI元人文框架:意义世界的探索引擎
  • abc432
  • 20232310 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 公告栏
  • 生物化学课程笔记
  • PELT算法浅析
  • hippy字节都在用的前端主流框架
  • springboot多模块报错分析(一) - f
  • 身为大厂前端的你,不能不知道Babel + Polyfill!
  • 2025.11.15博客
  • 实用指南:PyTorch DataLoader 高级用法
  • ESP32 I2S音频总线学习笔记(八):添加按键控制功能 - 详解
  • 2025年8款AI论文写作神器推荐:轻松搞定毕业论文查重
  • 基于python的酒店管理系统_36rhk752(Pycharm Flask Django成品源码LW) - 详解
  • 中级前端工程师详细技能清单
  • 航运、应急、工业适用,AORO P1100三防平板引领行业数字化变革 - 详解
  • 为什么高手写 CSS 都偏爱 rem?这三大优势无法拒绝
  • 完整教程:FPGA 49 ,Xilinx Vivado 软件术语解析(Vivado 界面常用英文字段详解,以及实际应用场景和注意事项 )
  • WPF中RelayCommand的完成与使用详解
  • Python 潮流周刊#127:Python 3.16 JIT 性能提升计划
  • 2025年目前品质好的羊毛地毯厂家推荐
  • 基础设施即服务(IaaS)全面解析:云计算的基石
  • Golang游戏开发笔记:地图索引系统实现
  • 完整教程:《简易制作 Linux Shell:详细分析原理、设计与实践》
  • 计算机网络5 - 指南
  • 2025年开除申诉靠谱机构推荐:专业学术申诉机构评测指南!
  • win10pro sn
  • 用递归的方式输出各位数字