在 Qt 框架中,QByteArray
和 QString
是两个常用的类,分别用于处理字节数组和字符串。它们之间的相互转换很简单,可以通过直接赋值或者使用相关的方法来实现。
1. QByteArray 转 QString
方法1:直接赋值或使用 QString
的构造函数
QByteArray byteArray = "Hello, World!";
QString string = byteArray; // 直接赋值转换
它的底层实现是调用了 QString::fromUtf8
,将字节数组按 UTF-8 编码转换为 QString
。
方法2:使用 QString::fromUtf8()
QString string = QString::fromUtf8(byteArray);
这种方式明确指定了编码方式为 UTF-8。
方法3:使用 QString::fromLatin1()
QString string = QString::fromLatin1(byteArray);
这种方式将字节数组按 ISO-8859-1(Latin-1)编码转换为 QString
。
方法4:使用 QString::fromLocal8Bit()
QString string = QString::fromLocal8Bit(byteArray);
这种方式将字节数组按本地 8 位编码(如 GBK)转换为 QString
。
2. QString 转 QByteArray
方法1:使用 QString::toUtf8()
QString string = "Hello, World!";
QByteArray byteArray = string.toUtf8(); // 转换为 UTF-8 编码的字节数组
这种方式生成一个 UTF-8 编码的字节数组。
方法2:使用 QString::toLatin1()
QByteArray byteArray = string.toLatin1(); // 转换为 ISO-8859-1 编码的字节数组
这种方式生成一个 ISO-8859-1 编码的字节数组。
方法3:使用 QString::toLocal8Bit()
QByteArray byteArray = string.toLocal8Bit(); // 转换为本地 8 位编码的字节数组
这种方式生成一个本地 8 位编码的字节数组。
3. 示例代码
#include <QByteArray>
#include <QString>
#include <QDebug>
int main() {
// QByteArray 转 QString
QByteArray byteArray = "Hello, World!";
QString string1 = byteArray;
QString string2 = QString::fromUtf8(byteArray);
QString string3 = QString::fromLatin1(byteArray);
QString string4 = QString::fromLocal8Bit(byteArray);
qDebug() << "string1:" << string1;
qDebug() << "string2:" << string2;
qDebug() << "string3:" << string3;
qDebug() << "string4:" << string4;
// QString 转 QByteArray
QString string = "Hello, World!";
QByteArray byte1 = string.toUtf8();
QByteArray byte2 = string.toLatin1();
QByteArray byte3 = string.toLocal8Bit();
qDebug() << "byte1:" << byte1;
qDebug() << "byte2:" << byte2;
qDebug() << "byte3:" << byte3;
return 0;
}
4. 注意事项
-
编码问题:在转换过程中,编码非常重要。如果字节数组的编码不符合预期,可能会导致乱码。因此,在转换时最好明确指定编码方式。
-
QByteArray
和QString
的默认编码:-
QByteArray
是一个字节数组,没有特定的编码。 -
QString
使用的是 Unicode 内部编码(UTF-16 或 UTF-32)。
-
-
性能:直接赋值的转换性能较高,而使用特定编码方式的转换(如
QString::fromUtf8()
)会涉及字符编码的转换,可能稍慢。
通过这些方法,你可以在 QByteArray
和 QString
之间方便地进行相互转换,以满足不同场景下的需求。