【QT】JSON如何保存(序列化)QByteArray二进制或十六进制类型的数据
创始人
2025-05-29 18:00:41
0

首先看一下QJson中插入数据insert的代码

iterator insert(const QString &key, const QJsonValue &value);

key:为string类型的键
value:为QJsonValue类型的值

	QJsonValue(Type = Null);QJsonValue(bool b);QJsonValue(double n);QJsonValue(int n);QJsonValue(qint64 n);QJsonValue(const QString &s);QJsonValue(QLatin1String s);

其QJsonValue存储数据的类型有:bool,double,int,QString等
可以看出是没有存储QByteArray类型的数据

那要怎样存储QByteArray二进制或十六进制类型的数据呢?
对于网上的QByteArray直接转化为QString类型的方法,是对于文本字符串的,例如:QByteArray byte("Hello");如果QByteArray为十六进制的数据,直接转化为QString 是不可以的,遇到\00时QString(a)直接转化时要么输出会为空,要么会缺失数据。

QString只有在数据是文本的时候才能使用,而不是二进制或十六进制的

如何在Json种保存QByteArray类型的十六进制数据,自己的一些拙见:

  • 方法一:先转化为toBase64();再使用QString::fromUtf8(或QString::fromLatin1或fromLocal8Bit)转化为QString类型
  • 方法二:先转化为toHex();再使用QString::fromUtf8(或QString::fromLatin1或fromLocal8Bit)转化为QString类型

直接上代码:

//方法一:
//序列化byteArray 
QJsonObject dataJsonObject;
dataJsonObject.insert("BYTEARRAY", QString::fromUtf8(byteArray.toBase64()));  //byteArray为QByteArray类型的16进制数据 //反序列化byteArray
byteArray = QByteArray::fromBase64(dataJsonObject.value("BYTEARRAY").toString).toUtf8());
//方法二:
//序列化byteArray 
QJsonObject dataJsonObject;
dataJsonObject.insert("BYTEARRAY", QString::fromLatin1(byteArray.toHex()));  //byteArray为QByteArray类型的16进制数据 //反序列化byteArray
byteArray = QByteArray::fromHex(dataJsonObject.value("BYTEARRAY").toString).fromLatin1());

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...