我对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时显示正确。
我也用同样的方式看过serializeToArray的其他帖子。我是不是做错了什么?
感谢您的帮助。谢谢!
发布于 2016-07-28 05:43:11
new QByteArray[sizeArray]分配一个sizeArray空QByteArray数组,而不是sizeArray-byte长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字节长。
https://stackoverflow.com/questions/38623525
复制相似问题