SerializeToArray protobuf not storing

SerializeToArray protobuf not storing

本文关键字:storing not protobuf SerializeToArray      更新时间:2023-10-16

我对protobufs非常陌生,并尝试一些简单的串行化和去串行化。

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;

产生结果

byteSizeOfEvent0:      48
preSTA size:           0
is event0 initialized? 1
The program has unexpectedly finished.

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

我看过其他以同样方式序列化ToArray的帖子。我是不是做错了什么?

感谢您的帮助。谢谢

new QByteArray[sizeArray]分配一个由sizeArrayQByteArray s组成的数组,而不是一个sizeArray字节长的QByteArray。如果你想使用QByteArray,它应该看起来像

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字节长。