QByteArray中来的QString(QByteArray to QString)

2019-07-17 19:01发布

我在遇到问题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" 。 我怎样才能解决这个问题?

Answer 1:

您可以使用QTextCodec来的字节组转换为字符串:

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个字节。 唯一的Unicode编码,其中ASCII字母以这种方式编码的,是UTF-16或UCS-2(这是UTF-16的受限版本),所以在你的情况下,需要在1015 MIB(假设当地的字节序是与输入字节序)。



Answer 2:

你可以使用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



Answer 3:

您可以使用:

QString::fromStdString(byteArray.toStdString())


Answer 4:

您可以使用此构造QString的转换,从QByteArray中到QString的:

的QString(常量的QByteArray&BA)

QByteArray data;
QString DataAsString = QString(data);


Answer 5:

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

对于QByteArray input"\010""\000" 的QString :: fromLocal8Bit(输入,1)返回"\010"""但的QString :: fromUtf8(输入,1)正确地返回"\010""\000"



Answer 6:

使用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测试。



Answer 7:

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


Answer 8:

您可以使用:

QString DataAsString = data.trimmed();

数据是一个QByteArray中。



文章来源: QByteArray to QString