有没有人能给我举一个在protobuf-c中使用重复子消息打包\解包消息的例子
有关此问题的empty官方文档。
发布于 2011-04-24 10:16:28
message B {
required int64 i = 1;
};
message A {
repeated B numbers = 1;
};
A a;
a.ParseFromString(<str>)
for (int i = 0; i < a.numbers_size(); ++i) {
const B& b = a.numbers(i);
printf("%d\n", b.i());
}发布于 2020-11-10 22:39:34
原件:
message SubMsg {
bytes value = 1;
}
message MainMsg {
repeated SubMsg msgs = 1;
}pack (不要忘记释放内存( free (...):
MainMsg mainMsg = { };
main_msg__init(&mainMsg);
SubMsg **subMsgs = calloc(LEN, sizeof(SubMsg*));
for (int i = 0; i < LEN; i++) {
subMsgs[i] = calloc(1, sizeof(SubMsg));
sub_msg__init(subMsgs[i]);
subMsgs[i]->value.data = DATA;
subMsgs[i]->value.len = DATALEN;
}
mainMsg.msgs = subMsgs;
mainMsg.n_msgs = LEN;
...
main_msg__pack(&mainMsg, BUFFER);解包(不要忘记释放内存(..._free_unpacked(...)):
MainMsg* mainMsg = main_msg__unpack(nullptr, BUFFERLEN, BUFFER);
if (! mainMsg) {
// error
return;
}
SubMsg **subMsgs = mainMsg->msgs;
...发布于 2011-05-14 20:53:12
谷歌C++教程的“阅读消息”部分有相关的示例代码:http://code.google.com/apis/protocolbuffers/docs/cpptutorial.html
此外,STL的for_each似乎也工作正常(语法糖,或多或少):std::for_each(a.numbers().begin(),a.numbers().end(),const B& b { std::cout << b.i() << std::endl;});
https://stackoverflow.com/questions/5202747
复制相似问题