首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >protobuf-c中重复的子消息

protobuf-c中重复的子消息
EN

Stack Overflow用户
提问于 2011-03-05 16:57:02
回答 3查看 2.3K关注 0票数 3

有没有人能给我举一个在protobuf-c中使用重复子消息打包\解包消息的例子

有关此问题的empty官方文档。

EN

回答 3

Stack Overflow用户

发布于 2011-04-24 10:16:28

代码语言:javascript
复制
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());
}
票数 2
EN

Stack Overflow用户

发布于 2020-11-10 22:39:34

原件:

代码语言:javascript
复制
message SubMsg {
  bytes value = 1;
}

message MainMsg {
  repeated SubMsg msgs = 1;
}

pack (不要忘记释放内存( free (...):

代码语言:javascript
复制
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(...)):

代码语言:javascript
复制
MainMsg* mainMsg = main_msg__unpack(nullptr, BUFFERLEN, BUFFER);
if (! mainMsg) {
    // error
    return;
}

SubMsg **subMsgs = mainMsg->msgs;
...
票数 0
EN

Stack Overflow用户

发布于 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;});

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5202747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档