详解Qt 之QByteArray

文章目录

  • 详解Qt之QByteArray
    • 前言
    • QByteArray
      • 概念
      • 作用
      • 为什么需要 QByteArray
      • QByteArray 的主要函数和成员
        • 函数列表
      • 示例代码
        • 示例 1:字节数组的基本操作
        • 示例 2:数据编码和解码
        • 示例 3:字节数组的字符串操作
    • 更多用法...
  • 总结


详解Qt之QByteArray

前言

QByteArray 是 Qt 框架中用于处理二进制数据的核心类之一。它提供了一种高效的方式来管理和操作字节数组,适用于需要处理原始二进制数据、网络数据、文件数据等多种场景。本文将详细介绍 QByteArray 类的概念、作用及其主要函数,并通过三个示例代码来展示 QByteArray 的实际使用。

QByteArray

概念

QByteArray 是 Qt 的一个类,用于存储和操作字节数据。与 QString 类不同,QByteArray 是专门设计用来处理原始字节数据的,而不是文本数据。它提供了对字节数组的各种操作,包括拼接、分割、查找和转换等功能。

作用

QByteArray 提供了一个高效的接口来操作字节数据。其主要功能包括:

  1. 数据存储和管理:用于存储任意二进制数据。
  2. 数据操作:支持数据拼接、截取、查找、替换等操作。
  3. 编码转换:支持不同编码格式之间的转换。
  4. 序列化和反序列化:常用于数据的读写和传输。

为什么需要 QByteArray

在 Qt 应用程序中,处理二进制数据是一种常见需求,例如网络通信、文件读写以及与外部设备的数据交互等。QByteArray 提供了一个灵活而强大的接口来高效地管理和操作这些二进制数据。

QByteArray 的主要函数和成员

函数列表
  • QByteArray()

    作用:构造一个空的 QByteArray 对象。

    参数:无。

    返回值:无。

  • QByteArray(const QByteArray &other)

    作用:拷贝构造函数,创建一个 QByteArray 对象的副本。

    参数

    • other:要拷贝的 QByteArray 对象。

    返回值:无。

  • QByteArray(const char *data, int size)

    作用:使用指定大小的 C 风格字符串构造 QByteArray 对象。

    参数

    • data:C 风格字符串。
    • size:字符串的大小。

    返回值:无。

  • QByteArray &operator=(const QByteArray &other)

    作用:赋值操作符,将一个 QByteArray 对象的内容赋值给另一个对象。

    参数

    • other:要赋值的 QByteArray 对象。

    返回值:赋值后的 QByteArray 对象。

  • int size() const

    作用:返回字节数组的大小(字节数)。

    参数:无。

    返回值:字节数组的大小。

  • bool isEmpty() const

    作用:检查字节数组是否为空。

    参数:无。

    返回值:如果字节数组为空,返回 true,否则返回 false

  • QByteArray &append(const QByteArray &other)

    作用:将 other 追加到当前字节数组末尾。

    参数

    • other:要追加的字节数组。

    返回值:追加后的 QByteArray 对象。

  • QByteArray &prepend(const QByteArray &other)

    作用:将 other 插入到当前字节数组的开头。

    参数

    • other:要插入的字节数组。

    返回值:插入后的 QByteArray 对象。

  • QByteArray mid(int pos, int len = -1) const

    作用:返回从 pos 位置开始的 len 个字节的子数组。

    参数

    • pos:起始位置。
    • len:要提取的字节数(默认为 -1,即提取到数组末尾)。

    返回值:提取的子数组。

  • int indexOf(char c, int from = 0) const

    作用:查找字符 c 在字节数组中的位置。

    参数

    • c:要查找的字符。
    • from:起始查找位置(默认为 0)。

    返回值:字符的位置,如果未找到则返回 -1。

  • QByteArray toHex() const

    作用:将字节数组转换为十六进制字符串。

    参数:无。

    返回值:转换后的十六进制字符串。

  • QByteArray fromHex(const QByteArray &hexString)

    作用:将十六进制字符串转换为字节数组。

    参数

    • hexString:十六进制字符串。

    返回值:转换后的 QByteArray 对象。

  • QByteArray fromBase64(const QByteArray &base64Data)

    作用:将 Base64 编码的字符串转换为字节数组。

    参数

    • base64Data:Base64 编码的字符串。

    返回值:转换后的 QByteArray 对象。

  • QByteArray toBase64() const

    作用:将字节数组转换为 Base64 编码的字符串。

    参数:无。

    返回值:Base64 编码的字符串。

  • QByteArray trimmed() const

    作用:返回去除字节数组两端空白字符的副本。

    参数:无。

    返回值:去除空白字符后的 QByteArray 对象。

示例代码

示例 1:字节数组的基本操作

以下示例展示了如何进行字节数组的拼接、截取和查找操作:

#include <QApplication>
#include <QByteArray>
#include <QDebug>int main(int argc, char *argv[]) {QApplication app(argc, argv);QByteArray data1("Hello ");QByteArray data2("World!");QByteArray result = data1 + data2; // 字节数组拼接qDebug() << "Concatenated data:" << result;QByteArray subData = result.mid(6, 5); // 提取子数组qDebug() << "Substring data:" << subData;int index = result.indexOf('W'); // 查找字符qDebug() << "Index of 'W':" << index;return app.exec();
}
示例 2:数据编码和解码

以下示例展示了如何将字节数组转换为十六进制字符串,以及如何将 Base64 编码的字符串转换为字节数组:

#include <QApplication>
#include <QByteArray>
#include <QDebug>int main(int argc, char *argv[]) {QApplication app(argc, argv);QByteArray data("Qt Framework");QByteArray hexData = data.toHex(); // 转换为十六进制字符串qDebug() << "Hex encoded data:" << hexData;QByteArray base64Data = data.toBase64(); // 转换为 Base64 编码qDebug() << "Base64 encoded data:" << base64Data;QByteArray decodedDataFromBase64 = QByteArray::fromBase64(base64Data); // 从 Base64 解码qDebug() << "Decoded from Base64:" << decodedDataFromBase64;return app.exec();
}
示例 3:字节数组的字符串操作

以下示例展示了如何从 C 风格字符串创建 QByteArray,以及如何处理空白字符:

#include <QApplication>
#include <QByteArray>
#include <QDebug>int main(int argc, char *argv[]) {QApplication app(argc, argv);const char *cStr = "   Qt Programming   ";QByteArray data(cStr); // 从 C 风格字符串创建 QByteArrayqDebug() << "Original data:" << data;QByteArray trimmedData = data.trimmed(); // 去除两端空白字符qDebug() << "Trimmed data:" << trimmedData;return app.exec();
}

更多用法…

在这里插入图片描述


总结

QByteArray 是 Qt 中用于处理二进制数据的重要类,提供了丰富的接口来管理和操作字节数组。通过本文的详细介绍和示例代码,读者可以深入了解 QByteArray 的功能及其在实际开发中的应用,从而更高效地处理各种二进制数据。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

vue3+fetch请求+接收到流式的markdown数据+一边gpt打字机式输出内容,一边解析markdown语法+highlight.js实现代码高亮

这个问题终于解决了&#xff01;好开心。 先看最终效果&#xff1a; video_20240724_141543_edit 项目背景&#xff1a;vue3 场景&#xff1a;像gpt一样可以对话&#xff0c;当用户发送问题之后&#xff0c;ai回复&#xff0c;ai是一部分一部分回复&#xff0c;像打印机式输出…

微服务-服务拆分-服务远程调用

查询订单demo 通过Bean的方式将RestTemplate注册为Spring的一个对象&#xff0c;即注入Spring容器&#xff08;要写在配置类中&#xff0c;启动类本身就是配置类&#xff09;。然后在任何地方都可以注入该对象使用。 Eureka注册中心 Eureka服务搭建 Eureka客户端注册 配置服务…

Java与模式及其应用场景知识点分享(电子版)

前言 Java 编程语言自1995年问世以来&#xff0c;其成功好像任何编程语言都无法媲美。生逢其时(互联网的兴起)固然是一方面的原因&#xff0c;而Java吸收总结了前人的经验教训&#xff0c;反映了最新技术(the state ofthe art)&#xff0c;对其受到欢迎和采用&#xff0c;恐怕…

如何在基于滤波框架的绝对定位系统中融合相对观测

文章目录 1 LIO、VIO propagation来代替IMU propagation2 TRO paper: Stochastic Cloning Kalman filter【有待填坑】 以无人驾驶定位系统为例&#xff0c;融合gnss&#xff0c;imu&#xff0c;轮速&#xff0c;camera LaneMatch(frame to map)&#xff0c;lidar scan match(fr…

大数据-55 Kafka sh脚本使用 与 JavaAPI使用 topics.sh producer.sh consumer.sh kafka-clients

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

如何有效管理众多账号密码:选择适合你的密码管理工具

在如今的数字化时代&#xff0c;我们的生活几乎离不开各种互联网应用和服务。从社交媒体到在线银行&#xff0c;从购物网站到工作平台&#xff0c;每个应用都要求我们注册账号并设置密码。 随着账号数量的不断增加&#xff0c;管理这些密码成为了一个令人头疼的问题。幸运的是…

【运维指南】常见的防火墙端口操作

每当一个应用程序想通过网络访问自己时&#xff0c;它就会申请一个 TCP/IP 端口&#xff0c;这意味着该端口不能被其他任何程序使用。那么&#xff0c;如何检查开放的端口&#xff0c;看看哪个应用程序已经在使用它呢&#xff1f; Windows 查看端口使用情况和进程名称 netst…

免费电子书网站

1.鸠摩搜书:https://www.jiumodiary.com/ 首页 白天模式 夜间模式(个人更喜欢白天的) 评分:☆☆☆☆☆ 1.网站简洁,刚开始只有一个搜索框。 2.内容多,而且有azw3、PDF、mobi、TXT、doc等6种格式提供下载 3.Last but not the least !!! 完全免费,不限制下载次数。…

QT+OpenGL绘制一个更加清晰的三维坐标系和图例

绘制图例 图例绘制有两种&#xff1a; 1. 设置多个颜色绘制 2.随机100个值&#xff08;自己可设置&#xff09;绘制 class CPointLegend : public CLegend { public:static CPointLegend& getInstance() {/*c11支持&#xff0c;线程安全的单例模式*/static CPointLegend …

Linux虚拟化技术KVM

文章目录 虚拟化基础什么是虚拟化虚拟化优势虚拟机虚拟机的主要特征Hypervisor类型类型1&#xff1a;裸金属型类型2&#xff1a;宿主型 KVM概述KVM体系结构KVM模块载入后的系统运行模式KVM集中管理和控制宿主机环境准备 安装KVM工具包libvirt包功能libvirt结构图安装KVM相关包C…

Linux AMBA 驱动:DMA 控制器 PL330 驱动简析

文章目录 1. 前言2. 背景3. PL330 简介4. PL330 驱动加载流程4.1 PL330 设备注册流程4.2 PL330 驱动加载流程 5. 小结6. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 本文基于…

鸿蒙对接极光推送时候报错1000900010,厂商token获取失败

在AppGallery Connect上配置项目的调试证书&#xff0c;然后手动导入&#xff0c;不要用IDE的自动构建证书&#xff1a; https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/

探索Python的加速神器:CyToolz,让数据处理快如闪电!

文章目录 探索Python的加速神器&#xff1a;CyToolz&#xff0c;让数据处理快如闪电&#xff01;背景&#xff1a;为何选择CyToolz&#xff1f;CyToolz是什么&#xff1f;如何安装CyToolz&#xff1f;五个简单函数的使用方法1. cytoolz.curry2. cytoolz.map3. cytoolz.reduce4.…

(十)联合概率数据互联原理及应用(JPDA)

目录 前言 一、JPDA原理及算法步骤 &#xff08;一&#xff09;算法步骤 1.确认矩阵计算 2.确认矩阵拆分 3.互联概率计算 4.状态及协方差更新 二、仿真验证 &#xff08;一&#xff09;模型构建 &#xff08;二&#xff09;仿真结果 总结 引用文献 前言 本文主要针…

微软:警惕利用VMware ESXi进行身份验证绕过攻击

微软于7月29日发布警告&#xff0c;称勒索软件团伙正在积极利用 VMware ESXi 身份验证绕过漏洞进行攻击。 该漏洞被追踪为 CVE-2024-37085&#xff0c;由微软安全研究人员 Edan Zwick、Danielle Kuznets Nohi 和 Meitar Pinto 发现&#xff0c;并在 6 月 25 日发布的 ESXi 8.0 …

吴恩达机器学习C1W2Lab05-使用Scikit-Learn进行线性回归

前言 有一个开源的、商业上可用的机器学习工具包&#xff0c;叫做scikit-learn。这个工具包包含了你将在本课程中使用的许多算法的实现。 目标 在本实验中&#xff0c;你将: 利用scikit-learn实现使用梯度下降的线性回归 工具 您将使用scikit-learn中的函数以及matplotli…

c#中使用数据验证器

前言 在很多情况下&#xff0c;用户的输入不一定满足我们的设计要求&#xff0c;需要验证输入是否正确&#xff0c;传统的方案是拿到控件数据进行逻辑判定验证后&#xff0c;给用户弹窗提示。这种方法有点职责延后的感觉&#xff0c;数据视图层应该很好的处理用户的输入。使用…

STM32DMA数据传输

我估计大多数人学这么久连听说都没听说过DMA&#xff0c;更不用提知道它是干嘛的。其实DMA的本质就是一个数据的搬运工。平常的时候当我们没有配置的时候&#xff0c;一直都是CPU在搬运数据&#xff0c;但是这个活又累又没有技术含量&#xff0c;所以DMA的重要性还是有的。 1.…

YOLOv9最新最全代码复现(论文复现)

YOLOv9最新最全代码复现&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 YOLOv9最新最全代码复现&#xff08;论文复现&#xff09;引言YOLOv9模型概述模型框架图环境搭建及训练推理环境配置数据集准备训练过程测试和评估实践应用 报错修…

【机器学习西瓜书学习笔记——神经网络】

机器学习西瓜书学习笔记【第四章】 第五章 神经网络5.1神经元模型5.2 感知机与多层网络学习感知机学习率成本/损失函数梯度下降 5.3 BP神经网络&#xff08;误差逆传播&#xff09;5.4 全局最小与局部极小5.5 其他常见神经网络RBF网络RBF 与 BP 最重要的区别 ART网络 第五章 神…