QByteArray到QString

时间:2013-01-02 23:55:00

标签: c++ qt qstring qtcore qbytearray

我遇到QByteArrayQString的问题。

我正在阅读文件并将其信息存储在QByteArray中。该文件是unicode,因此它包含:t\0 e\0 s\0 t\0 \0 \0

我正在尝试将此值与我指定的值进行比较,但它失败了,因为在调试器中我发现它不是unicode字符串。

代码将解释所有内容:

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

在调试器中,它向我显示变量Data的值为"t\0 e\0 s\0 t\0 \0 \0"myValue的值为"test"。我该如何解决?

9 个答案:

答案 0 :(得分:24)

您可以使用QTextCodec将bytearray转换为字符串:

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

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

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

答案 1 :(得分:12)

您可以使用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-21872 https://bugreports.qt.io/browse/QTBUG-21872

答案 2 :(得分:6)

您可以使用:

QString::fromStdString(byteArray.toStdString())

答案 3 :(得分:5)

您可以使用以下QString构造函数将QByteArray转换为QString:

QString(const QByteArray&ba)

QByteArray data;
QString DataAsString = QString(data);

答案 4 :(得分:4)

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

QByteArray input "\010""\000"的{​​{1}}, QString::fromLocal8Bit(input, 1)已返回"\010""",但QString::fromUtf8(input, 1)已正确返回"\010""\000"

答案 5 :(得分:3)

使用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', '\0', 'e', '\0', 's', '\0', 't', '\0', '\0', '\0'};
    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进行测试。

答案 6 :(得分:0)

Qt 4.8

QString(byteArray).toStdString();

Qt 5.12

byteArray.toStdString();

答案 7 :(得分:-1)

QString a = "test";
QByteArray a1 = a.toUtf8();
QString backToString = a1;

答案 8 :(得分:-3)

您可以使用:

QString DataAsString = data.trimmed();

数据是QByteArray。