我有一个Protobuf协议文件,如下所示:
message Foo {
message Bar {
required string name = 1;
required string value = 2;
}
message Baz {
required Bar a = 1;
}
}
鉴于此协议文件,我需要使用protobuf-c(Protobuf的C扩展)编写编码器。我写了以下代码:
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中解决这个问题?
答案 0 :(得分:2)
在Protocol Buffers中声明嵌套类型就像在C ++中声明嵌套类或在Java中声明static
内部类。这只是声明一种新类型;它不会向外部类型添加字段。因此,在您的proto架构中,Foo
是一个完全空的消息 - 它没有字段。无论您使用哪种编程语言,都是如此。
你打算做的事情可能是这样的:
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
个对象。