当前位置: 首页 > 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 来实现。

http://www.lryc.cn/news/67187.html

相关文章:

  • APP 兼容性测试是什么?8年测试老鸟告诉你
  • Golang每日一练(leetDay0061) 表列序号、阶乘后的零
  • 深度解析C++异常处理机制:最佳实践、性能分析和挑战
  • 【Spring事务】Spring事务事件控制,解决业务异步操作
  • Java 中的注释有哪些?
  • yolov4
  • 金融学第二版笔记第一章1.1
  • [架构之路-193]-《软考-系统分析师》-2-应用数学 - 项目周期与关键路径(PERT图、甘特图、单代号网络图、双代号网络图)
  • 滋灌中小企业,分销伙伴和华为来做“送水人”
  • 面试华为测试岗,收到offer后我却毫不犹豫拒绝了....
  • 深入了解浮点型变量输入与输出
  • Vector - CAPL - CANoe硬件配置函数 - 03
  • 单开网页应用利器 - BroadcastChannel
  • OpenCv更改颜色空间以及图像阈值
  • (邱维声)高等代数课程笔记:基,维数与坐标
  • Spring Security + Jwt 集成实现登录
  • yolov5 用自己的数据集进行训练
  • 1951-2023最新中国基础地理信息,包括水系、行政区、DEM高程、气象站经纬位置、土地利用,这些数据获取方法介绍
  • CAD处理控件Aspose.CAD功能演示:在 C#中以编程方式搜索 DWG 图形文件中的文本
  • 实验二十、压控电压源二阶 LPF 幅频特性的研究
  • 类和对象【C++】【中篇】
  • 2.SpringBoot运维实用篇
  • 【c++】浅讲引用
  • CSS布局基础(文字[行内<块>]与行内[块]垂直对齐方式 文字溢出显示省略号)
  • AI自动写文章_免费在线原创文章生成器
  • Java阶段二Day15
  • 从月薪3000到月薪20000,自动化测试应该这样学...
  • Python魔法方法 单例模式
  • 计算机网络基础知识(三)—— 什么是OSI七层模型?
  • Python(符号计算常微分方程)谐振子牛顿运动方程