从QString获取QByteArray

时间:2017-11-22 14:22:55

标签: qt unicode encoding decoding qstring

我试图了解QByteArray和String如何在qt中一起工作。所以,我有以下情况,我在内存中创建了一个QByteArray。

QByteArray qba;
quint8 version = 1;
qba << version;
quint8 type = 122;
qba << type;

qDebug() << qba.length() << " " << QString(qba);

debug语句打印:

2   "\u0001z"

所以,我有2个字节的数据,并提取字符串表示。

现在,我想要做的是从字符串表示开始(作为原始C ++ char数组提供给我)并创建QByteArray表示。所以,我按如下方式创建数组:

char msg[] = { '\\', 'u', '0', '0', '0', '1', 'z', '\0' };
QString testStr = QString::fromUtf8(msg);
QByteArray testRaw = testStr.toUtf8();
qDebug() << testRaw.length() << " " << QString(testRaw);

现在打印:

7   "\\u0001z"

我不知道如何从这样的字符数组开始并获得字节数组表示。我不确定这是否是字符串编码问题,但无论我尝试使用哪种String方法(fromLatin1fromUtf16等,我都无法重新创建此二进制表示。)

我正在使用Qt 5.9

1 个答案:

答案 0 :(得分:0)

QStringQByteArray之间的转换是编码所依赖的! 您的QString(qba)假定数据采用UTF-8编码,请参阅QString documentation

在另一方面你有:

如此依赖,也有反之亦然的静态方法。

<小时/> 请注意qDebug() << anyString; 不会按照字面意思打印数据,而是以开发人员的形式打印,这就是为什么它被引号包围,并且不可打印的字符被转换为&#34; \ u0001&#34;

QByteArray qba;
quint8 version = 1;
qba << version;
quint8 type = 122;
qba << type;

// character '\1' is not printable, so qDebug do a developer friendly conversion 
qDebug() << qba.length() << " " << QString(qba);

// to revert conversion, you code should look like this:
QString convnerted(qba);
QByteArray reverted = convnerted.toUtf8();

Q_ASSERT(reverted == qba);