我有一个Protobuf文件,看起来如下所示:
message Foo {
message Bar {
required string name = 1;
required string value = 2;
}
message Baz {
required Bar a = 1;
}
}考虑到这个协议文件,我需要使用Protobuf的C扩展名Protobuf编写一个编码器。我编写了以下代码:
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语言做这件事?
发布于 2015-05-15 18:22:03
在协议缓冲区中声明嵌套类型就像在C++或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对象。
https://stackoverflow.com/questions/30252276
复制相似问题