首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >protobuf-c:如何打包嵌套消息

protobuf-c:如何打包嵌套消息
EN

Stack Overflow用户
提问于 2015-05-15 05:41:32
回答 1查看 10.3K关注 0票数 4

我有一个Protobuf文件,看起来如下所示:

代码语言:javascript
复制
message Foo {
    message Bar {
        required string name = 1;
        required string value = 2;
    }

    message Baz {
        required Bar a = 1;
    }
}

考虑到这个协议文件,我需要使用Protobuf的C扩展名Protobuf编写一个编码器。我编写了以下代码:

代码语言:javascript
复制
Foo myfoo = FOO__INIT;
Foo__Bar mybar = FOO__BAR__INIT;
Foo__Baz mybaz = FOO__BAZ__INIT;
mybaz.a = &mybar;

但是,关于如何序列化mybaz,我还停留在这里。生成的Foo结构不包含我可以将mybaz分配给的任何条目。也没有生成直接打包Baz的方法。

在Python中,这要简单得多,因为已经生成了一个mybaz.SerializeToString()函数。我该怎么用C语言做这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-15 18:22:03

在协议缓冲区中声明嵌套类型就像在C++或static内部类中声明嵌套类一样。这只是声明一个新类型;它不向外部类型添加字段。因此,在您的proto模式中,Foo是一个完全空的消息--它没有字段。无论您使用哪种编程语言,这都是正确的。

也许你想做的事情是这样的:

代码语言:javascript
复制
message Foo {
  message Bar {
    required string name = 1;
    required string value = 2;
  }

  message Baz {
    required Bar a = 1;
  }

  optional Baz baz = 1;
}

现在,Foo有了一个名为baz的字段,您可以在其中分配Baz对象。

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

https://stackoverflow.com/questions/30252276

复制
相关文章

相似问题

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