qbytearray是啥类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qbytearray是啥类型相关的知识,希望对你有一定的参考价值。

参考技术A   QByteArray具有类似与QString的API。它也有相应的函数,比如left(), right(), mid()等。这些函数不仅名字和QString一样,而且也具有几乎相同的功能。QByteArray可以存储原生的二进制数据和8位编码的文本数据。这句话怎么理解呢?我们知道,计算机内部所有的数据都是以0和1的形式存储的。这种形式就是二进制。比如一串0、1代码:1000,计算机并不知道它代表的是什么,这需要由上下文决定:它可以是整数8,也可以是一个ARGB的颜色(准确的说,整数8的编码并不是这么简单,但我们姑且这个理解吧)。对于文件,即便是一个文本文件,读出时也可以按照二进制的形式读出,这就是二进制格式。如果把这些二进制的0、1串按照编码解释成一个个字符,就是文本形式了。因此,QByteArray实际上是原生的二进制,但是也可以当作是文本,因此拥有文本的一些操作。但是,我们还是建议使用QString表示文本,重要的原因是,QString支持Unicode。

Qt 学习笔记 4. QByteArray

1. hex 概念

Qt 中,hex是指 十六进制数 的表示形式。

可以使用 QString 对象的 toLocal8Bit() 方法将 hex 字符串 转换为 QByteArray 类型的 二进制数据
并可以使用 QByteArray 对象的 toHex() 方法将 二进制数据 转换回 hex 字符串
这些方法通常用于处理 图像音频 文件,以及进行 数字签名 等操作。

以下是一个简单的示例代码:

QByteArray byte_array = 0x12, 0x34, 0x56, 0x78;
QString hex_data = byte_array.toHex();  // 将二进制数据转换为hex字符串
QByteArray decoded_data = QByteArray::fromHex(hex_data.toLocal8Bit());  // 将hex字符串转换为二进制数据

qDebug() << hex_data;  // 输出:12345678
qDebug() << decoded_data; // 输出:"\\x12\\x34\\x56\\x78"

在以上实例中,首先创建了一个 QByteArray 对象,其中保存了四个字节的二进制数据。
然后,使用QByteArray 对象的 toHex() 方法将其转换为 hex 字符串,并设置其为 QString 对象。
接着,使用 QString 对象的 toLocal8Bit() 方法将 hex 字符串转换为 QByteArray 类型的二进制数据,并使用 fromHex() 方法将其还原为原始的二进制数据。
最终,使用 qDebug() 函数分别输出了二进制数据 转换后hex 字符串和 还原后 的二进制数据。

需要注意的是,虽然 hex 字符串使用十六进制数字来表示数据,但是它们的实际大小和原始的二进制数据大小是不同的。
在将 hex 字符串转换回原始的二进制数据时,需要确保使用正确的 编码格式,否则可能会导致解码出错。

2.一些常用于处理 hex 数据的函数

Qt 中,可以使用 hex 字符串来表示 二进制数据hex 字符串 可以通过 QByteArray 对象的 toHex() 方法生成,也可以通过 QByteArray 对象的 fromHex() 方法将 hex 字符串 转换为 二进制数据

以下是一些常用于处理 hex 数据的函数:

  1. QByteArray QByteArray::toHex() const

该函数将当前 QByteArray 对象中的 二进制数据 转换为 hex 字符串,并返回该字符串。
默认情况下,各个字节之间不会添加分隔符,例如"0123456789ABCDEF"。

  1. QByteArray QByteArray::fromHex(const QByteArray &hexEncoded)

该函数将给定的 hex 字符串 转换为 二进制数据,并返回一个新的 QByteArray 对象。
hexEncoded参数指定要转换的 hex 字符串。

  1. bool QByteArray::fromHex(const char *hexEncoded, int len)

该函数将给定长度的 hex 字符串 转换为 二进制数据,并直接写入当前 QByteArray 对象的数据中。
hexEncoded 参数指定要转换的 hex 字符串,len 指定 hex 字符串的长度。
如果转换成功,函数返回 true,否则返回 false

  1. QByteArray QByteArray::fromHex(const QString &hexEncoded)

该函数类似于 QByteArray::fromHex(const QByteArray& hexEncoded),但是可以直接使用 QString 类型的 hex 字符串作为输入。

在使用 hex 字符串 表示 二进制数据 时,通常需要注意以下几点:

  1. 各个字节之间的分隔符QByteArray::toHex() 方法生成的 hex 字符串通常 没有 分隔符,使用时需要根据需要手动添加。

例如,可以使用 QString::split() 方法将 hex 字符串分为每两个字符一组,并使用 QString::join() 方法在每组之间添加空格或其他字符。

  1. 字节顺序:在网络传输和存储过程中,字节顺序可能会被改变。

Qt 提供了一些函数来处理 字节序转换,例如 qFromLittleEndian()qFromBigEndian()qToLittleEndian()qToBigEndian() 等。

  1. 编码格式QByteArray::fromHex() 方法可以 解析 多种编码格式的 hex 字符串,例如 UTF-8Latin-1 等。

在使用该函数时,需要确保使用正确的编码格式。

总之,在使用 hex 字符串表示二进制数据时,需要小心处理各种细节问题,以免出现错误。

以上是关于qbytearray是啥类型的主要内容,如果未能解决你的问题,请参考以下文章

QT:QByteArray和QByteArraychar *(转)

Qt 从QByteArray类型数据恢复long in型数据

qt 下怎么把Qstringlist 转化为Qbytearray 类型?

如何将qt中的qbytearray类型数据转换成去qstring类型

Qt 学习笔记 4. QByteArray

Qt ------- QByteArray操作注意