QByteArray和QString的相互转换

在 Qt 框架中,QByteArrayQString 是两个常用的类,分别用于处理字节数组和字符串。它们之间的相互转换很简单,可以通过直接赋值或者使用相关的方法来实现。

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. 注意事项
  • 编码问题:在转换过程中,编码非常重要。如果字节数组的编码不符合预期,可能会导致乱码。因此,在转换时最好明确指定编码方式。

  • QByteArrayQString 的默认编码

    • QByteArray 是一个字节数组,没有特定的编码。

    • QString 使用的是 Unicode 内部编码(UTF-16 或 UTF-32)。

  • 性能:直接赋值的转换性能较高,而使用特定编码方式的转换(如 QString::fromUtf8())会涉及字符编码的转换,可能稍慢。

通过这些方法,你可以在 QByteArrayQString 之间方便地进行相互转换,以满足不同场景下的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值