3.1.8.Qt容器大家族(4):QByteArray——字节数组

1.内容介绍

前几节课,我们讲解了QString,它是来存储文字的。但是呢,有时候我们要来存储一些不是文字的数据,比如说文件内容、网络数据、图片等,那么这时,QString就派不上用场了,那我们要怎么办呢?

这时,我们就要用到我们今天要讲到的QByteArray啦!它是Qt容器大家族中的老五,同样是一个常见的容器,而且它也不需要申请头文件,和老大、老二、老三、老四一样。

2.讲解QByteArray

QByteArray嘛,它其实简单来说,存的是原始字节,而QString存的就是一个一个的字符。它不管里面存的是图片还是文字,只管一个字节一个字节存着。

打个比方,QString就像是一个笔记本,上面写的是字。

而QByteArray就像是一个快递盒,它不管里面装的是什么。

我们如何创建一个QByteArray呢?首先第一种,最简单的还是字符串赋值,第二种是一个指定长度的方法, 第一个参数填一个字符串,第二个参数填限定的长度,就像是给快递盒定好了最大容量。

cpp 复制代码
QByteArray ba("World", 5);

第三种,我们可以让这个byteArray重复多个字符,第一个参数是要重复的次数,第二个是要重复的字符。

cpp 复制代码
QByteArray ba(10, 'A'); //AAAAAAAAAA

当然,QByteArray和QString一样,也有number函数,QByteArray有QString所有的填法,只不过它还多了一种填法,可以把number里面的数转成指定进制。

QByteArray也同样有toInt,但是后面我们可以填写进制。number函数可以把数字转成任意进制,toInt 也能从任意进制转回来。

cpp 复制代码
QByteArray ba1 = QByteArray::number(123); //123(10进制)
QByteArray ba2 = QByteArray::number(255, 16); //ff(16进制)
int val1 = ba1.toInt(); //123
int val2 = ba2.toInt(nullptr, 16); //255

那么QByteArray有哪些常用操作呢?其实很简单,它的操作和QString是完全一样的!所以我就不一一列举了,但是有一点要注意------QByteArray中,如果有中文,而且是UTF-8编码,那么一个中文是占3个字节的,所以如果QByteArray是一个中文字,那么length就会返回3。

对了,我告诉你们,QByteArray和QString之间是可以互相转化的!首先,我们怎么把QString转成QByteArray呢?有两种方法,第一种使用toUtf8函数,会把QString编码成Utf8编码,就会出现我上面说的中文占3个字节的情况。第二种是用toLocal8Bit函数,会把QString编码成你自己电脑的本地编码,中文一般就是1个字节了。

既然QString能转QByteArray,那么QByteArray也能转成QString!要把QByteArray转成QString,那么我们就可以用QString中的两个静态函数------fromUtf8和fromLocal8Bit,它们可以把编码好的QByteArray解码回来。

cpp 复制代码
QString str = "你好";
QByteArray ba1 = s.toUtf8();
QByteArray ba2 = s.toLocal8Bit();
QString s1 = QString::fromUtf8(ba1);
QString s2 = QString::fromLocal8Bit(ba2);

QByteArray还有一个很厉害的招数!它可以把你给他的字符串变成16进制编码,这样就可以看到这个字符串的16进制数据了!要获取这个16进制数据,我们可以用QByteArray中的toHex函数来转化,可以填写参数,也能不填,填写参数的话,填的是一个分隔符,可以让大家更清楚的看到这个16进制的每个字符。

那么既然有这种正操作,那么反操作怎么搞呢?要把16进制数据给到QByteArray,我们就要用到QByteArray的静态函数------fromHex,我们可以在里面输入16进制编码,QByteArray就能反推出原本的字符串。

cpp 复制代码
QByteArray ba = "Hello";
QString hex1 = ba.toHex(); //48656c6c6f
QString hex2 = ba.toHex(' ');//48 65 6c 6c 6f
//这里转化的编码是通过ASCII码转化成16进制的
QByteArray raw = QByteArray::fromHex(hex1); //Hello

好啦,QByteArray我们就讲到这里。我们下节课再见,拜拜!

相关推荐
AC赳赳老秦22 分钟前
OpenClaw 与 FineBI 联动方案:公开数据自动采集与实时业务分析看板实践
大数据·开发语言·python·php·finebi·deepseek·openclaw
通信瓦工26 分钟前
OCP 冷却环境与冷却剂分配单元(CDU)子项目
java·开发语言
坤坤子吖1 小时前
Python基础语法学习:函数
开发语言·笔记·python·学习
言乐61 小时前
Python体现逻辑回归和决策树的区别
开发语言·python·算法·决策树·逻辑回归
扶尔魔ocy1 小时前
【qt openGL入门笔记】坐标系统和摄像机
qt·opengl
LOVE️YOU1 小时前
Python 类与对象的核心逻辑:从 self、cls 到点号、括号与链式调用
开发语言·python
顶点多余1 小时前
C/C++常见面试题
开发语言·c++
(Charon)1 小时前
【C++面试】右值引用与移动语义:std::move到底做了什么
开发语言·c++
TheITSea1 小时前
JavaScript Web APIs
开发语言·前端·javascript
空心木偶☜1 小时前
A2A2A(多智能体协作)
开发语言·python·ai·ai编程