c++ - SerializeToArray protobuf 不存储

标签 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 和调试时,事件已初始化并正确显示。

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

感谢任何帮助。 谢谢!

最佳答案

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

关于c++ - SerializeToArray protobuf 不存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623525/

相关文章:

c++ - 确定 3D 点是否位于轴对齐立方体内的最快方法?

C++ 连接 __FILE__ 和 __LINE__ 宏?

c++ - 如何使用vector <vector <int >>找到严格位于矩阵次对角线上的元素之和?

go - 如何使用 protobuf 二进制文件在 PUB/SUB ( ZeroMQ ) 中进行过滤?

protocol-buffers - Protocol Buffer - 重复 bool 值的最佳实践

CMake 找不到 Protobuf `protobuf_generate_cpp`

c++ - 在声明期间将值初始化为二维 vector

c++ - QML:如何使用日期函数

c++ - Qt单元测试依赖问题

c++ - Qt 将文本文件中的行分配给标签