问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何把对象写入qbytearray

发布网友 发布时间:2022-11-19 11:53

我来回答

1个回答

热心网友 时间:2024-02-16 21:45

1. 利用memcpy拷贝内存数据
//自定义person结构体
Cpp代码
typedef struct
{
int age;
char name[20];
}Person;

//向QByteArray写入多个结构体
void writeStruct()
{
QByteArray ba;
ba.resize(2*sizeof(Person)); //设置容量

//序列化
for(int i=0;i<2;i++)
{
Person p1;
p1.age=10+i;
strcpy(p1.name,"javaeye");
memcpy(ba.data()+i*sizeof(Person),&p1,sizeof(Person)); //指针移动,写入多个数据
}

//还原数据
Person *person=(Person*)ba.data();
qDebug()<<person->age<<"---"<<person->name;

person++;
qDebug()<<person->age<<"---"<<person->name;
}

memcpy只能处理字段为基本类型的结构体, 当使用QString name, 我用person->name去访问其值, 程序崩溃; 由此可见,内存数据无法还原构建成QString类. 如果要写入自定的QT类, 只能借助QBuffer了, 通过二进制流写入

2. QBuffer写入QT自定义结构体

Cpp代码
//QBuffer序列化自定义对象
typedef struct
{
int age;
QString name;
}QPerson;

/**
*@brief 重载自定义对象的输入
*/
inline QDataStream &operator<<(QDataStream &out,const QPerson &per)
{
out<<per.age<<per.name;
return out;
}

/**
*@brief 重载自定义对象的输出
*/
inline QDataStream &operator>>(QDataStream &in,QPerson &per)
{
int age;
QString name;
in>>age>>name;

per.age=age;
per.name=name;
return in;
}

/**
* @brief QBuffer能处理QT自定义类型
*/
void testQBuffer()
{
QByteArray ba;
ba.resize(2*sizeof(QPerson));

QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);

//输入
QDataStream out(&buffer);
for(int i=0;i<2;i++)
{
QPerson per;
per.age=20+i;
per.name=QString("sun_%1").arg(i+1);
out<<per;
}
buffer.close();

//输出
QBuffer buf(&ba);
buf.open(QIODevice::ReadOnly);

QDataStream in(&buf);
for(int i=0;i<2;i++)
{
QPerson per;
in>>per;
qDebug()<<per.age<<"---"<<per.name;
}
buf.close();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
假征信报告哪里做 非常想问,做征信报告要多少钱,真假怎么分辨? 请问银川有没有好的办出国留学的学校啊? 银川英皇留学跟其他的中介有什么不一样吗? 银川留学机构在什么地方? 银川留学哪里做的比较好呀,急求! 谁了解银川哪家出国留学中介机构比较好 迅游手游加速器使用教程 迅游手游加速器如何添加游戏 添加游戏方法 电脑短信验证插件如何安装电脑上如何安装插件 电力线路二路电源核相是核相序还是核相位 配电线路核相,是核对相序?核对相位?还是两者都核 房子再大又能够如何是什么歌 韩语 把给洗了没 那个洞噶 么意思。。。 从白鹅这篇课文把给你留下了怎样的影响请你结合课文说一说? 他还是我把给玩了` 我把给你的备注改回了全名什么歌 把给我翅膀,我想飞翻译成日语版 我跟男朋友提的分手,他要求把给我花的钱全部还给他,我该怎么办?_百度... 使用人员控制数选聘硕士研究生是什么意思 用过戴尔SK8115键盘后 用什么轴的机械键盘好? 古董机械键盘是什么轴 习惯了DELL8135,不知道买红轴还是茶轴的机械键盘? 黑轴、红轴、茶轴、青轴、与40多的那个DELL键盘相比,哪个轴与DELL手感相... procreate 设备不支持 蒸米饭米要泡多久 制作蒸米饭泡多久米 如何在NEAR网络创建一个自抵押的验证人节点 Substrate 一键发链极简教程(五)- 配置验证人节点 一个公司为什么要开发管理信息系统 为什么要继续开发新系统,而不是去完善鸿蒙系统,不浪费资源吗?_百度... Qt用什么链表操作结构体 QT QMap如何以自定义类型当Key? QT中定义这中结构体,一直报packed未声明的标识符的错误 佳能打印机黄灯闪烁什么原因 京东方电子价签应用到生活上有什么优势? 100oC的水蒸气遇冷,水蒸气液化,温度为多少 1g水蒸气能在100oc以上液化吗 物理题~~急!! dnf怎么把修理商德利拉换了 镖滴打车成都开通了吗 骑行旅游注意事项 小米手机隐私笔记在哪-小米手机隐私笔记设置 小米口袋打印机不现实手机相片 电子书的目录怎么弄? QQ邮箱 别人转发给我的视频附件我点击“转发”和“下载”都没有反应... 工程造价属于哪一类专业 协昌云平台的运维管理是指什么 三国历史故事-诸葛亮与周瑜 千牛生意参谋不提醒访客量了 ...用鼠标被隔的很疼有没有什么保护用品可以用的?例如护腕