我对 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 和调试时,事件已初始化并正确显示。
我看过其他以相同方式序列化ToArray 的帖子。我做错了什么吗?
感谢任何帮助。 谢谢!
最佳答案
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
字节长。
关于c++ - SerializeToArray protobuf 不存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623525/