最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt的QJsonObject存儲QByteArray的方法實現(xiàn)

 更新時間:2026年02月02日 09:23:34   作者:上去我就QWER  
本文主要介紹了Qt的QJsonObject存儲QByteArray的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在 Qt 中,QJsonObject 本身不直接支持存儲 QByteArray 類型(因為 JSON 標準僅支持字符串、數(shù)字、布爾、數(shù)組、對象、null 六種類型),但可以通過 Base64 編碼 將 QByteArray 轉(zhuǎn)換為 JSON 支持的字符串類型存儲,讀取時再解碼回 QByteArray。

核心思路

JSON 僅支持字符串類型,因此:

  1. 存儲:將 QByteArray 用 Base64 編碼為 QString,再存入 QJsonObject;
  2. 讀?。簭?QJsonObject 中取出 QString,用 Base64 解碼回 QByteArray。

Qt 提供了 QByteArray::toBase64() 和 QByteArray::fromBase64() 方法,直接支持該轉(zhuǎn)換。

完整示例代碼

#include <QCoreApplication>
#include <QJsonObject>
#include <QByteArray>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 1. 準備原始 QByteArray 數(shù)據(jù)(示例:二進制數(shù)據(jù)或文件內(nèi)容)
    QByteArray originalData = "Hello QByteArray + QJsonObject!"; // 也可以是二進制數(shù)據(jù)(如圖片、文件)
    qDebug() << "原始 QByteArray:" << originalData;

    // 2. 將 QByteArray 編碼為 Base64 字符串(存入 QJsonObject)
    QJsonObject jsonObj;
    QString base64Str = originalData.toBase64(); // 編碼為 Base64 字符串
    jsonObj["binaryData"] = base64Str; // 存入 JSON 對象

    // 3. 從 QJsonObject 讀取并解碼回 QByteArray
    QString retrievedBase64 = jsonObj["binaryData"].toString(); // 取出 Base64 字符串
    QByteArray decodedData = QByteArray::fromBase64(retrievedBase64.toUtf8()); // 解碼

    // 驗證結(jié)果
    qDebug() << "解碼后的 QByteArray:" << decodedData;
    qDebug() << "是否一致:" << (originalData == decodedData);

    return a.exec();
}

關(guān)鍵細節(jié)說明

  1. Base64 編碼的兼容性

    • Base64 編碼后的字符串是純 ASCII 字符,完全符合 JSON 字符串規(guī)范,可跨平臺、跨語言解析(如 Java、Python 等也支持 Base64 解碼)。
    • 若需要 URL 安全的 Base64 編碼(避免 +、/ 等特殊字符),可使用 QByteArray::toBase64(QByteArray::Base64UrlEncoding),解碼時對應(yīng) QByteArray::fromBase64(..., QByteArray::Base64UrlEncoding)。
  2. 二進制數(shù)據(jù)的處理:
    示例中用了字符串作為 QByteArray 內(nèi)容,實際使用時,originalData 可以是任意二進制數(shù)據(jù)(如讀取文件、網(wǎng)絡(luò)傳輸?shù)亩M制流):

    // 示例:讀取圖片文件為 QByteArray
    QFile file("test.png");
    if (file.open(QIODevice::ReadOnly)) {
        QByteArray imageData = file.readAll();
        jsonObj["image"] = imageData.toBase64(); // 存入 JSON
        file.close();
    }
    
  3. 空數(shù)據(jù)處理
    若 QByteArray 為空,toBase64() 會返回空字符串,fromBase64() 也會解碼為空,無需額外判斷,兼容性良好。

擴展:使用自定義序列化(Qt 5.15+)

若使用 Qt 5.15 及以上版本,可通過 QJsonValue::fromVariant() 間接支持 QByteArray(本質(zhì)還是 Base64 編碼),但不推薦直接依賴(可讀性差,跨語言不兼容):

// 不推薦(僅 Qt 內(nèi)部兼容,跨語言解析困難)
jsonObj["binaryData"] = QJsonValue::fromVariant(originalData); 
QByteArray decodedData = jsonObj["binaryData"].toVariant().toByteArray();

總結(jié)

推薦使用 Base64 編碼 方式存儲 QByteArrayQJsonObject,優(yōu)點是:

  • 完全符合 JSON 標準,跨平臺/跨語言兼容;
  • Qt 原生支持,代碼簡潔;
  • 支持任意二進制數(shù)據(jù)(包括空數(shù)據(jù))。

到此這篇關(guān)于Qt的QJsonObject存儲QByteArray的方法實現(xiàn)的文章就介紹到這了,更多相關(guān)Qt 存儲QByteArray內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用C++的基本算法實現(xiàn)十個數(shù)排序

    利用C++的基本算法實現(xiàn)十個數(shù)排序

    以下是對利用C++的基本算法實現(xiàn)十個數(shù)排序的代碼進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • 算法之排列算法與組合算法詳解

    算法之排列算法與組合算法詳解

    這篇文章主要介紹了算法之排列算法與組合算法詳解,本文以字典序法、遞歸法為例講解了排列算法、全組合算法等,需要的朋友可以參考下
    2014-08-08
  • C++ decltype 說明符

    C++ decltype 說明符

    這篇文章主要介紹了C++ decltype 說明符,檢查實體的聲明類型,或表達式的類型和值類別。下面我們來看看文章中的具體內(nèi)容吧

    2021-12-12
  • boost.asio框架系列之定時器Timer

    boost.asio框架系列之定時器Timer

    這篇文章介紹了boost.asio框架系列之定時器Timer,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 詳解C++?STL模擬實現(xiàn)list

    詳解C++?STL模擬實現(xiàn)list

    這篇文章主要為大家詳細介紹了C++如何模擬實現(xiàn)STL容器list,文中的示例代碼講解詳細,對我們學習C++有一定幫助,需要的可以參考一下
    2023-01-01
  • C/C++ memset方法的誤區(qū)

    C/C++ memset方法的誤區(qū)

    memset 作為對內(nèi)存初始化的函數(shù),還是有不少坑和誤區(qū)的,今天就來對這個函數(shù)作一個總結(jié)。避免后期使用不當踩入坑,需要的朋友可以參考下
    2021-04-04
  • c++查詢最短路徑示例

    c++查詢最短路徑示例

    這篇文章主要介紹了c++查詢最短路徑示例,需要的朋友可以參考下
    2014-05-05
  • 深入講解C++中的構(gòu)造函數(shù)

    深入講解C++中的構(gòu)造函數(shù)

    這篇文章主要介紹了C++中的構(gòu)造函數(shù),是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++?AnimeGAN實現(xiàn)照片一鍵動漫化

    C++?AnimeGAN實現(xiàn)照片一鍵動漫化

    AnimeGAN是是由神經(jīng)網(wǎng)絡(luò)風格遷移加生成對抗網(wǎng)絡(luò)(GAN)而成,它是基于CartoonGAN的改進,并提出了一個更加輕量級的生成器架構(gòu)。本文將介紹如何運用AnimeGAN實現(xiàn)照片一鍵動漫化,需要的可以參考一下
    2021-11-11
  • 匯編語言rep movsd 的使用詳解

    匯編語言rep movsd 的使用詳解

    rep movsd 每次ecx!=0便執(zhí)行movsd ,然后ecx=ecx-1 movsd移動ds:[si] 到es:[di],在32位匯編下可以用esi代替si,edi代替di
    2013-09-09

最新評論

民丰县| 奉贤区| 青海省| 新巴尔虎右旗| 建瓯市| 措美县| 梓潼县| 嘉禾县| 屯留县| 马公市| 泰宁县| 那曲县| 福建省| 江北区| 岗巴县| 定襄县| 鲜城| 繁昌县| 福海县| 康平县| 伊春市| 盖州市| 宁晋县| 尤溪县| 原平市| 太湖县| 长白| 黄平县| 泾源县| 北海市| 武山县| 香港| 平江县| 宜都市| 高密市| 栖霞市| 伊吾县| 义乌市| 铁岭县| 习水县| 临安市|