簡體   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