首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SerializeToArray协议不存储

SerializeToArray协议不存储
EN

Stack Overflow用户
提问于 2016-07-28 05:31:49
回答 1查看 905关注 0票数 1

我对protobufs非常陌生,正在尝试一些简单的序列化和反序列化。

代码语言:javascript
复制
int sizeArray        = event0.ByteSize();
QByteArray * qbArray = new QByteArray[sizeArray];

cout << "byteSizeOfEvent0:      " << sizeArray              << endl;    
cout << "preSTA size:           " << qbArray->size()        << endl;
cout << "is event0 initialized? " << event0.IsInitialized() << endl;

event0.SerializeToArray(qbArray, sizeArray);

cout << "postSTA size: " << qbArray->size() << endl;

生成结果

代码语言:javascript
复制
byteSizeOfEvent0:      48
preSTA size:           0
is event0 initialized? 1
The program has unexpectedly finished.

在SerializeToArray之后调用qbArray的过程导致崩溃,我认为是由于写入数据失败所致。事件已初始化,并且在使用SerializeAsString和deBugging时显示正确。

我也用同样的方式看过serializeToArray的其他帖子。我是不是做错了什么?

感谢您的帮助。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-07-28 05:43:11

new QByteArray[sizeArray]分配一个sizeArrayQByteArray数组,而不是sizeArray-byte长QByteArray。如果你想使用QByteArray,它应该看起来像这样

代码语言:javascript
复制
int sizeArray = event0.ByteSize();
QByteArray qbArray(sizeArray, 0);

cout << "byteSizeOfEvent0:      " << sizeArray              << endl;    
cout << "preSTA size:           " << qbArray.size()         << endl;
cout << "is event0 initialized? " << event0.IsInitialized() << endl;

event0.SerializeToArray(qbArray.data(), sizeArray);

cout << "postSTA size: " << qbArray.size() << endl;

但是,请注意,这两个size()调用都将返回相同的内容,因为qbArray被初始化为sizeArray字节长。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38623525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档