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:QByteArray::insert:QByteArray::replace:QByteArray::remove:QByteArray::toHex:QByteArray::fromHex:QByteArray::toBase64:QByteArray::fromBase64…...

APP 兼容性测试是什么?8年测试老鸟告诉你
1、APP 兼容性测试认识 随着 APP 应用范围越来越广,用户群体越来越大,终端设备的型号也越来越多,移动终端碎片化加剧,使得 APP 兼容性测试成为测试质量保障必须要考虑的环节。 APP 兼容性测试通常会考虑:操作系统、厂…...

Golang每日一练(leetDay0061) 表列序号、阶乘后的零
目录 171. Excel 表列序号 Excel Sheet Column Number 🌟 172. 阶乘后的零 Factorial Trailing Zeroes 🌟🌟 🌟 每日一练刷题专栏 🌟 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事务事件控制,解决业务异步操作
使用背景 在业务中,经常会有这样的需求,在数据库事务提交之后,发送异步消息或者进行其他的事务操作。 例如当用户注册成功之后,发送激活码,如果用户注册后就执行发送激活码,但是在用户保存时出现提交事务…...
Java 中的注释有哪些?
在 Java 中,有三种注释方式:单行注释、多行注释和文档注释。注释是程序中的一种重要的辅助性说明文字,可以增加程序的可读性和可维护性,方便其他程序员阅读和理解代码。 单行注释 单行注释是指以“//”开头的注释,注释…...

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

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

[架构之路-193]-《软考-系统分析师》-2-应用数学 - 项目周期与关键路径(PERT图、甘特图、单代号网络图、双代号网络图)
1. 关键概念 1.1 关键路径 关键路径通常(但并非总是)是决定项目工期的进度活动序列。它是项目中最长的路径,即使很小浮动也可能直接影响整个项目的最早完成时间。关键路径的工期决定了整个项目的工期,任何关键路径上的终端元素…...

滋灌中小企业,分销伙伴和华为来做“送水人”
最近有个段子:第一批靠生成式AI赚大钱的人,既不是研发人员,也不是国内大厂,而是卖课的。 大家笑谈,每一轮新技术的掘金之路,最先致富的都是送水、卖铲子的。 这其实隐藏了一个信息技术产业的普遍规律&#…...

面试华为测试岗,收到offer后我却毫不犹豫拒绝了....
我大学学的是计算机专业,毕业的时候,对于找工作比较迷茫,也不知道当时怎么想的,一头就扎进了一家外包公司,一干就是2年。我想说的是,但凡有点机会,千万别去外包! 在深思熟虑过后&am…...
深入了解浮点型变量输入与输出
深入了解浮点型变量输入与输出 前言 C 语言中浮点型变量的输入和输出在程序开发中非常常见,比如经常出现在数据处理和科学计算中。在此篇文章中,我们将探讨浮点型变量输入和输出的一些细节和注意事项。 浮点型变量的定义和初始化 在 C 语言中&#x…...

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

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

OpenCv更改颜色空间以及图像阈值
本文主要讲解以下几个方面: 如何将图片从一个颜色空间转换到另一个,例如 BGR 到 Gray,BGR 到 HSV 等。简单阈值法另外,我们会创建一个从图片中提取彩色对象的应用。 1.改变颜色空间 cv.cvtColor(img, flag) 参数flag表示颜色空间转换的方…...
(邱维声)高等代数课程笔记:基,维数与坐标
3.5 基,维数与坐标 \quad 本节,继续研究线性空间的结构。一般地,设 V V V 是数域 K K K 上的一个线性空间。 \quad 首先,我们先将“线性相关”与“线性无关”的概念由“有限”向“无限”推广。 对比其它高等代数教程,…...

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

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

1951-2023最新中国基础地理信息,包括水系、行政区、DEM高程、气象站经纬位置、土地利用,这些数据获取方法介绍
水系: 流域内所有河流、湖泊等各种水体组成的水网系统,称作水系。其中,水流最终流入海洋的称作外流水系,如太平洋水系、北冰洋水系;水流最终流入内陆湖泊或消失于荒漠之中的,称作内流水系。 [1] 流域面积的…...
CAD处理控件Aspose.CAD功能演示:在 C#中以编程方式搜索 DWG 图形文件中的文本
Aspose.CAD 是一个独立的类库,以加强 Java应用程序处理和渲染CAD图纸,而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OB…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...