[英]QByteArray to QString
我在使用QByteArray
和QString
遇到問題。
我正在讀取文件並將其信息存儲在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.