我对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的其他帖子。我做错了什么?
任何帮助表示赞赏。 谢谢!
答案 0 :(得分:0)
new QByteArray[sizeArray]
分配一个sizeArray
空QByteArray
个数组,而不是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
个字节长。