gpt4 book ai didi

c - protobuf-c : How to pack nested messages

转载 作者:行者123 更新时间:2023-12-03 20:35:13 25 4
gpt4 key购买 nike

我有一个看起来像这样的 Protobuf 协议(protocol)文件:

message Foo {
message Bar {
required string name = 1;
required string value = 2;
}

message Baz {
required Bar a = 1;
}
}

给定这个协议(protocol)文件,我需要使用 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 中解决这个问题?

最佳答案

在 Protocol Buffers 中声明嵌套类型就像在 C++ 或 static 中声明嵌套类。 Java中的内部类。这只是声明了一个新类型;它不会向外部类型添加字段。因此,在您的原型(prototype)模式中,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目的。

关于c - protobuf-c : How to pack nested messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30252276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com