[英]Qt C++ Conversion from QJsonValue to QByteArray
我在QJsonValue
有一个大的(兆字节)字符串,我需要将其转换为QByteArray
,因为我将字符串作为数据发送到QNetworkRequest
。
目前我这样做:
myQJsonObject["myQJsonValue"].toString().toUtf8()
由于某种原因,这会导致多次将相同的数据复制到内存中吗? 如果是这样,你如何在没有不必要的复制的情况下实现这一点?
为什么你不使用QJsonDocument
? 这应该用于阅读和写作。 有一个方法QJsonDocument :: toBinaryData 。 这个API应该以最有效的方式完成所有事情。
单个JSon值必须是其他JSon类型之一:object,string或某个数字。 我很确定你有JSon对象。 所以你的代码应该是这样的::
JSonValue val = someJsond["someKey"];
if (val.isObject()) {
QJSonDocument doc(val.toObject());
SendToServer(doc.toBinaryData());
} else {
// error or:
SendToServer(val.toString().toUtf8());
}
由于Qt的copy-on-write语义,对myQJsonObject["myQJsonValue"].toString()
的调用不涉及数据复制。
toUtf8
调用成本toUtf8
。 QString
将数据存储为Unicode(16位QChar
),并以UTF-8编码它不仅仅涉及数据复制。
QString::constData()
返回指向底层字符数组的指针。 但是,在Utf-8的情况下,每个字符由2个字节而不是1或2个字节表示。 这可能意味着通过网络发送两倍以上的数据。
因此,如果您的数据主要由ASCII字符组成,那么UTF-8可能是更好的选择。 如果它包含许多非Ascii字符,而另一方可以处理UTF-16,那么UTF-16值得考虑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.