【发布时间】:2013-11-26 20:30:44
【问题描述】:
org.proto
message Optimize {
required int element_size = 1;
required string element_name = 2;
}
message nodes {
repeated Optimize = 1;
}
有这个解码功能:
DecodeNodeMsg(char *msg, int size)
{
Org::nodes node;
int element_size;
string element_name;
int NumofElem = 0;
node.ParseFromArray((void *)msg, size);
for (int i = 0; i < nodes.Optimize().size(); i++)
{
element_size = nodes.Optimize(i).element_size();
element_name = nodes.Optimize(i).element_name();
cout << "size" << element_size << endl;
cout << "name" << element_name << endl;
NumofElem++;
}
cout << "number of" << NumofElem << endl;
}
我正在对包含三个优化消息的节点消息进行编码。并调用此解码函数。编码部分是一个旧代码,长期运行良好。所以我不怀疑编码功能。
在解码函数中,我看到 NumofElem 正确打印为三个。但是,我看到 element_size 和 element_name 都只是垃圾。整数有一些垃圾值,字符串有一个二进制数据。
仅当此重复字段时,我才会遇到此问题。如果字段是必填/可选字段,那么我没有这个问题。
有人有类似的问题吗...?如果是这样,有什么关于如何解决这个问题的线索吗?
谢谢, 基兰
【问题讨论】:
-
您能否提供实际编译并演示该错误的代码?您现在拥有的代码无法编译——至少,
.proto语法无效,而且我对 C++ 有疑问。
标签: c++ protocol-buffers