QByteArray to QString



我的QByteArrayQString有问题。

我正在读取一个文件,并将其信息存储在QByteArray中。该文件是unicode格式的,因此它包含以下内容:t e s t

我试图将这个值与我指定的值进行比较,但它失败了,因为在调试器中我看到它不是unicode字符串。

代码将解释一切:

QByteArray Data; //contains unicode string "t e s t  "
QString myValue = "test"; //value to compare.
if(Data.contains(myValue))
    //do some stuff.
else
    //do other stuff.

在调试器中,它显示变量Data的值为"t e s t ",而myValue的值为"test"。我该怎么修?

您可以使用此QString构造函数从QByteArray转换为QString:

QString(const QByteArray&ba(

QByteArray data;
QString DataAsString = QString(data);

您可以使用QTextCodec将字节数组转换为字符串:

QString DataAsString = QTextCodec::codecForMib(1015)->toUnicode(Data);

(1015是UTF-16、1014 UTF-16LE、1013 UTF-16BE、106 UTF-8(

从您的示例中,我们可以看到字符串"test"在您的编码中被编码为"t e s t ",即每个ascii字符后面都跟着一个字节,或resp。每个ascii字符编码为2个字节。唯一以这种方式编码ascii字母的unicode编码是UTF-16或UCS-2(这是UTF-16的限制版本(,因此在您的情况下需要1015-mib(假设您的本地端序与输入端序相同(。

您可以使用:

QString::fromStdString(byteArray.toStdString())

您可以使用QString::fromAscii()

QByteArray data = entity->getData();
QString s_data = QString::fromAscii(data.data());

其中data()返回char*

对于QT5,应该使用fromCString(),因为fromAscii()已弃用,请参阅https://bugreports.qt-project.org/browse/QTBUG-21872https://bugreports.qt.io/browse/QTBUG-21872

您可能会发现QString::fromUtf8((也很有用。

对于"10"QByteArray input"00"

QString::fromLocal8Bit(input,1(返回"10"""

QString::fromUtf8(input,1(正确返回"10""00"

使用QString::fromUtf16((ushort *)Data.data()),如以下代码示例所示:

#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    // QByteArray to QString
    // =====================
    const char c_test[10] = {'t', '', 'e', '', 's', '', 't', '', '', ''};
    QByteArray qba_test(QByteArray::fromRawData(c_test, 10));
    qDebug().nospace().noquote() << "qba_test[" << qba_test << "]"; // Should see: qba_test[t
    QString qstr_test = QString::fromUtf16((ushort *)qba_test.data());
    qDebug().nospace().noquote() << "qstr_test[" << qstr_test << "]"; // Should see: qstr_test[test]
    return a.exec();
}

这是使用QTextCodec的解决方案的替代方案。该代码已使用Qt 5.4进行了测试。

Qt 5.12及以上:

QString::fromStdString(byteArray.toStdString());

最新更新