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

QT常用类型字节数组QByteArray及其基本使用

目录

  • 概述
  • 特点
  • 常见函数
    • QByteArray::append:
    • QByteArray::insert:
    • QByteArray::replace:
    • QByteArray::remove:
    • QByteArray::toHex:
    • QByteArray::fromHex:
    • QByteArray::toBase64:
    • QByteArray::fromBase64:
  • 注意:灵活使用赋值与QByteArray::detach()
  • 总结

概述

QByteArray 是 Qt 框架中用于存储字节数组的类,它提供了一系列操作字节数组的函数,非常方便。在 Qt 中,QByteArray 类被广泛用于处理二进制数据、图像、音频、视频等多媒体数据,也可以用于网络传输和文件操作等场景。

特点

QByteArray 的主要特点有:

高效性:QByteArray 的内部实现使用了指针和引用计数技术,可以高效地存储和访问大量数据。
功能强大:QByteArray 提供了丰富的字节数组操作函数,例如 append、insert、replace、remove 等,可以灵活地操作字节数组。
支持多种编码方式:QByteArray 支持多种编码方式,例如 ASCII、UTF-8、UTF-16 等,可以方便地处理不同编码的数据。

常见函数

下面是一些常用的 QByteArray 函数:

QByteArray::append:

将一个字节数组添加到另一个字节数组末尾。

QByteArray byteArray1("hello");
QByteArray byteArray2("world");
byteArray1.append(byteArray2); // 字节数组变为 "helloworld"

QByteArray::insert:

在指定位置插入一个字节数组。

QByteArray byteArray("hello");
byteArray.insert(1, "w"); // 字节数组变为 "hwello"

QByteArray::replace:

替换指定位置的字节数组。

QByteArray byteArray("hello");
byteArray.replace(1, 2, "a"); // 字节数组变为 "hallo"

QByteArray::remove:

移除指定位置的字节数组。

QByteArray byteArray("hello");
byteArray.remove(1, 2); // 字节数组变为 "ho"

QByteArray::toHex:

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

QByteArray byteArray("\x12\x34\x56\x78");
QString hexString = byteArray.toHex(); // hexString = "12345678"

QByteArray::fromHex:

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

QString hexString("12345678");
QByteArray byteArray = QByteArray::fromHex(hexString.toUtf8()); // byteArray = "\x12\x34\x56\x78"

QByteArray::toBase64:

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

QByteArray byteArray("hello");
QString base64String = byteArray.toBase64(); // base64String = "aGVsbG8="

QByteArray::fromBase64:

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

QString base64String("aGVsbG8=");
QByteArray byteArray = QByteArray::fromBase64(base64String.toUtf8()); // byteArray = "hello"

注意:灵活使用赋值与QByteArray::detach()

使用 QByteArray 处理字节数组非常方便,可以大大简化代码。但需要注意的是,由于 QByteArray 的内部实现采用指针和引用计数技术,因此当一个 QByteArray 对象被赋值给另一个对象时,实际上只是复制了一个指针,而不是复制整个字节数组。这意味着如果在一个 QByteArray 对象上进行修改,可能会影响到其他使用同一字节数组的对象。

例如,下面的代码创建了两个 QByteArray 对象,它们共享同一个内部字节数组:

QByteArray byteArray1("hello");
QByteArray byteArray2 = byteArray1; // 复制了一个指针
byteArray1[1] = 'a';
qDebug() << byteArray1; // 输出 "hallo"
qDebug() << byteArray2; // 也输出 "hallo"

为了避免这种问题,可以使用 QByteArray::detach() 函数将一个 QByteArray 对象的内部字节数组复制一份,这样就不会影响其他对象了。例如:

QByteArray byteArray1("hello");
QByteArray byteArray2 = byteArray1; // 复制了一个指针
byteArray1.detach(); // 复制字节数组
byteArray1[1] = 'a';
qDebug() << byteArray1; // 输出 "hallo"
qDebug() << byteArray2; // 输出 "hello"

除了上面介绍的函数,QByteArray 还提供了一些其他常用的函数,例如:

QByteArray::size:返回字节数组的大小。
QByteArray::isEmpty:判断字节数组是否为空。
QByteArray::isNull:判断字节数组是否为 null。
QByteArray::clear:清空字节数组。
QByteArray::constData:返回一个指向字节数组数据的常量指针。
QByteArray::data:返回一个指向字节数组数据的非常量指针。
QByteArray::operator[]:通过下标访问字节数组中的某个元素。

总结

总之,QByteArray 是一个非常实用的类,可以方便地处理二进制数据。在 Qt 中,几乎所有需要处理字节数组的场景都可以使用 QByteArray 来实现。

相关文章:

QT常用类型字节数组QByteArray及其基本使用

目录 概述特点常见函数QByteArray::append&#xff1a;QByteArray::insert&#xff1a;QByteArray::replace&#xff1a;QByteArray::remove&#xff1a;QByteArray::toHex&#xff1a;QByteArray::fromHex&#xff1a;QByteArray::toBase64&#xff1a;QByteArray::fromBase64…...

APP 兼容性测试是什么?8年测试老鸟告诉你

1、APP 兼容性测试认识 随着 APP 应用范围越来越广&#xff0c;用户群体越来越大&#xff0c;终端设备的型号也越来越多&#xff0c;移动终端碎片化加剧&#xff0c;使得 APP 兼容性测试成为测试质量保障必须要考虑的环节。 APP 兼容性测试通常会考虑&#xff1a;操作系统、厂…...

Golang每日一练(leetDay0061) 表列序号、阶乘后的零

目录 171. Excel 表列序号 Excel Sheet Column Number &#x1f31f; 172. 阶乘后的零 Factorial Trailing Zeroes &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练…...

深度解析C++异常处理机制:最佳实践、性能分析和挑战

C 基础知识 八 异常处理 下篇 一、异常处理实践1 编写高质量代码中的异常处理1.1 只在必要时才使用异常1.2 尽量减小异常的范围1.3 不要隐藏异常1.4 不要在析构函数中抛出异常1.5 使用 RAII 技术来管理资源 2 维护异常类2.1 按照异常类型的功能来定义异常类2.2 继承现有的异常类…...

【Spring事务】Spring事务事件控制,解决业务异步操作

使用背景 在业务中&#xff0c;经常会有这样的需求&#xff0c;在数据库事务提交之后&#xff0c;发送异步消息或者进行其他的事务操作。 例如当用户注册成功之后&#xff0c;发送激活码&#xff0c;如果用户注册后就执行发送激活码&#xff0c;但是在用户保存时出现提交事务…...

Java 中的注释有哪些?

在 Java 中&#xff0c;有三种注释方式&#xff1a;单行注释、多行注释和文档注释。注释是程序中的一种重要的辅助性说明文字&#xff0c;可以增加程序的可读性和可维护性&#xff0c;方便其他程序员阅读和理解代码。 单行注释 单行注释是指以“//”开头的注释&#xff0c;注释…...

yolov4

1 V4版本概述 集各种优秀方案于一身&#xff0c;嫁接了众多主流的目标识别方面的情况。 V4 贡献 3. 数据增强策略分析 BOF Bag of freebies(BOF) Mosiac 数据增强 Mixup 比如将狗和猫的两张图片混合&#xff0c;一半猫&#xff0c;一半狗。 label 也变成 Dog 0.5 , Cat 0…...

金融学第二版笔记第一章1.1

第1部分 金融和金融体系 第一章金融学 1.1 一、 对金融学进行界定 1.金融 金融是货币流通、信用活动及与之相关的经济行为的总称。 简言之&#xff0c;就是货币资金的融通。一般是指以银行、证券市场等为中心的货币流通和信用调节活动&#xff0c;包括货币的发行和流通、存…...

[架构之路-193]-《软考-系统分析师》-2-应用数学 - 项目周期与关键路径(PERT图、甘特图、单代号网络图、双代号网络图)

1. 关键概念 1.1 关键路径 关键路径通常&#xff08;但并非总是&#xff09;是决定项目工期的进度活动序列。它是项目中最长的路径&#xff0c;即使很小浮动也可能直接影响整个项目的最早完成时间。关键路径的工期决定了整个项目的工期&#xff0c;任何关键路径上的终端元素…...

滋灌中小企业,分销伙伴和华为来做“送水人”

最近有个段子&#xff1a;第一批靠生成式AI赚大钱的人&#xff0c;既不是研发人员&#xff0c;也不是国内大厂&#xff0c;而是卖课的。 大家笑谈&#xff0c;每一轮新技术的掘金之路&#xff0c;最先致富的都是送水、卖铲子的。 这其实隐藏了一个信息技术产业的普遍规律&#…...

面试华为测试岗,收到offer后我却毫不犹豫拒绝了....

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是2年。我想说的是&#xff0c;但凡有点机会&#xff0c;千万别去外包&#xff01; 在深思熟虑过后&am…...

深入了解浮点型变量输入与输出

深入了解浮点型变量输入与输出 前言 C 语言中浮点型变量的输入和输出在程序开发中非常常见&#xff0c;比如经常出现在数据处理和科学计算中。在此篇文章中&#xff0c;我们将探讨浮点型变量输入和输出的一些细节和注意事项。 浮点型变量的定义和初始化 在 C 语言中&#x…...

Vector - CAPL - CANoe硬件配置函数 - 03

目录 canFlushTxQueue -- 刷新已定义的Tx队列 代码示例 canSetChannelAcc -- CANoe接收过滤器设置 代码示例 canSetChannelMode -- CAN控制器Tx使能/失能 代码示例 canSetChannelOutput -- Ack自应答使能/失能 代码示例 getCardTypeEx -- CAN控制器类型 canFlushTxQue…...

单开网页应用利器 - BroadcastChannel

前言 前段时间在做一个基于 psd 模板生成图片的应用&#xff0c;其中重要的功能就是打开编辑器页面来设计出图。但是有个问题&#xff0c;每当我点击一个模板&#xff0c;就会新开一个浏览器页签。现代浏览器是以空间换时间的运行思路来提高效率&#xff0c;这就导致了内存开销…...

OpenCv更改颜色空间以及图像阈值

本文主要讲解以下几个方面: 如何将图片从一个颜色空间转换到另一个&#xff0c;例如 BGR 到 Gray&#xff0c;BGR 到 HSV 等。简单阈值法另外&#xff0c;我们会创建一个从图片中提取彩色对象的应用。 1.改变颜色空间 cv.cvtColor(img, flag) 参数flag表示颜色空间转换的方…...

(邱维声)高等代数课程笔记:基,维数与坐标

3.5 基&#xff0c;维数与坐标 \quad 本节&#xff0c;继续研究线性空间的结构。一般地&#xff0c;设 V V V 是数域 K K K 上的一个线性空间。 \quad 首先&#xff0c;我们先将“线性相关”与“线性无关”的概念由“有限”向“无限”推广。 对比其它高等代数教程&#xff0c…...

Spring Security + Jwt 集成实现登录

文章目录 前言Maven 相关依赖配置文件自定义springsecurity相关认证流程继承WebSecurityConfigurerAdapter继承AbstractAuthenticationToken继承AbstractAuthenticationProcessingFilter实现AuthenticationProvider实现UserDetailsService实现AccessDeniedHandler实现Authentic…...

yolov5 用自己的数据集进行训练

在训练之前先要按照一定目录格式准备数据&#xff1a; VOC标签格式转yolo格式并划分训练集和测试集_爱钓鱼的歪猴的博客-CSDN博客 目录 1、修改数据配置文件 2、修改模型配置文件 3、训练 1、修改数据配置文件 coco.yaml 拷贝data/scripts/coco.yaml文件&#xff0c; pa…...

1951-2023最新中国基础地理信息,包括水系、行政区、DEM高程、气象站经纬位置、土地利用,这些数据获取方法介绍

水系&#xff1a; 流域内所有河流、湖泊等各种水体组成的水网系统&#xff0c;称作水系。其中&#xff0c;水流最终流入海洋的称作外流水系&#xff0c;如太平洋水系、北冰洋水系&#xff1b;水流最终流入内陆湖泊或消失于荒漠之中的&#xff0c;称作内流水系。 [1] 流域面积的…...

CAD处理控件Aspose.CAD功能演示:在 C#中以编程方式搜索 DWG 图形文件中的文本

Aspose.CAD 是一个独立的类库&#xff0c;以加强 Java应用程序处理和渲染CAD图纸&#xff0c;而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG&#xff0c; DWT&#xff0c; DWF&#xff0c; DWFX&#xff0c; IFC&#xff0c; PLT&#xff0c; DGN&#xff0c; OB…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...