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
数据的函数:
QByteArray QByteArray::toHex() const
该函数将当前
QByteArray
对象中的 二进制数据 转换为hex
字符串,并返回该字符串。
默认情况下,各个字节之间不会添加分隔符,例如"0123456789ABCDEF"。
QByteArray QByteArray::fromHex(const QByteArray &hexEncoded)
该函数将给定的
hex
字符串 转换为 二进制数据,并返回一个新的QByteArray
对象。
hexEncoded
参数指定要转换的hex
字符串。
bool QByteArray::fromHex(const char *hexEncoded, int len)
该函数将给定长度的
hex
字符串 转换为 二进制数据,并直接写入当前QByteArray
对象的数据中。
hexEncoded
参数指定要转换的hex
字符串,len
指定hex
字符串的长度。
如果转换成功,函数返回true
,否则返回false
。
QByteArray QByteArray::fromHex(const QString &hexEncoded)
该函数类似于
QByteArray::fromHex(const QByteArray& hexEncoded)
,但是可以直接使用QString
类型的hex
字符串作为输入。
在使用
hex
字符串 表示 二进制数据 时,通常需要注意以下几点:
- 各个字节之间的分隔符:
QByteArray::toHex()
方法生成的hex
字符串通常 没有 分隔符,使用时需要根据需要手动添加。
例如,可以使用
QString::split()
方法将hex
字符串分为每两个字符一组,并使用QString::join()
方法在每组之间添加空格或其他字符。
- 字节顺序:在网络传输和存储过程中,字节顺序可能会被改变。
Qt
提供了一些函数来处理 字节序转换,例如qFromLittleEndian()
、qFromBigEndian()
、qToLittleEndian()
、qToBigEndian()
等。
- 编码格式:
QByteArray::fromHex()
方法可以 解析 多种编码格式的hex
字符串,例如UTF-8
、Latin-1
等。
在使用该函数时,需要确保使用正确的编码格式。
总之,在使用
hex
字符串表示二进制数据时,需要小心处理各种细节问题,以免出现错误。
以上是关于qbytearray是啥类型的主要内容,如果未能解决你的问题,请参考以下文章
QT:QByteArray和QByteArraychar *(转)
Qt 从QByteArray类型数据恢复long in型数据
qt 下怎么把Qstringlist 转化为Qbytearray 类型?