SerializeToArray protobuf不存储

时间:2016-07-27 21:31:49

标签: c++ qt protocol-buffers

我对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的过程,我假设由于写入数据失败。使用SerializeAsString和deBugging时,事件已初始化并显示正确。

我已经以同样的方式查看了序列化ToArray的其他帖子。我做错了什么?

任何帮助表示赞赏。 谢谢!

1 个答案:

答案 0 :(得分:0)

new QByteArray[sizeArray]分配一个sizeArrayQByteArray个数组,而不是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个字节长。