繁体   English   中英

Qt C ++从QJsonValue转换为QByteArray

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM