簡體   English   中英

QByteArray 到 QString

[英]QByteArray to QString

我在使用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" 我該如何解決?

您可以使用此 QString 構造函數將 QByteArray 轉換為 QString:

QString(const QByteArray &ba)

QByteArray data;
QString DataAsString = QString(data);

您可以使用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字節,或每個 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-21872 https://bugreports.qt.io/browse/QTBUG- 21872

您可能會發現QString::fromUtf8()也很有用。

對於"\\010""\\000" QByteArray input

QString::fromLocal8Bit(input, 1)返回"\\010"""

QString::fromUtf8(input, 1)正確返回"\\010""\\000"

使用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 進行了測試。

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

Qt 4.8

QString(byteArray).toStdString();

Qt 5.12

byteArray.toStdString();

您可以使用:

QString DataAsString = data.trimmed();

數據是一個QByteArray。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM