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

Qt的QJsonObject存儲(chǔ)QByteArray的方法實(shí)現(xiàn)

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

在 Qt 中,QJsonObject 本身不直接支持存儲(chǔ) QByteArray 類(lèi)型(因?yàn)?JSON 標(biāo)準(zhǔn)僅支持字符串、數(shù)字、布爾、數(shù)組、對(duì)象、null 六種類(lèi)型),但可以通過(guò) Base64 編碼 將 QByteArray 轉(zhuǎn)換為 JSON 支持的字符串類(lèi)型存儲(chǔ),讀取時(shí)再解碼回 QByteArray。

核心思路

JSON 僅支持字符串類(lèi)型,因此:

  1. 存儲(chǔ):將 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. 準(zhǔn)備原始 QByteArray 數(shù)據(jù)(示例:二進(jìn)制數(shù)據(jù)或文件內(nèi)容)
    QByteArray originalData = "Hello QByteArray + QJsonObject!"; // 也可以是二進(jìn)制數(shù)據(jù)(如圖片、文件)
    qDebug() << "原始 QByteArray:" << originalData;

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

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

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

    return a.exec();
}

關(guān)鍵細(xì)節(jié)說(shuō)明

  1. Base64 編碼的兼容性

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

    // 示例:讀取圖片文件為 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() 會(huì)返回空字符串,fromBase64() 也會(huì)解碼為空,無(wú)需額外判斷,兼容性良好。

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

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

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

總結(jié)

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

  • 完全符合 JSON 標(biāo)準(zhǔn),跨平臺(tái)/跨語(yǔ)言兼容;
  • Qt 原生支持,代碼簡(jiǎn)潔;
  • 支持任意二進(jìn)制數(shù)據(jù)(包括空數(shù)據(jù))。

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

相關(guān)文章

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

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

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

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

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

    C++ decltype 說(shuō)明符

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

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

    boost.asio框架系列之定時(shí)器Timer

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

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

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

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

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

    c++查詢(xún)最短路徑示例

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

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

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

    C++?AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化

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

    匯編語(yǔ)言rep movsd 的使用詳解

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

最新評(píng)論

平山县| 宁安市| 綦江县| 万源市| 类乌齐县| 宝应县| 秭归县| 济源市| 灵宝市| 莆田市| 德安县| 萍乡市| 德清县| 宿迁市| 天峻县| 大方县| 昭平县| 肇东市| 洛川县| 武城县| 黔西| 犍为县| 阜阳市| 浑源县| 连州市| 曲周县| 凤凰县| 中超| 宜阳县| 隆林| 福建省| 开江县| 报价| 文成县| 永州市| 黄龙县| 余干县| 临城县| 兴国县| 石阡县| 柯坪县|