У меня есть файл Protobuf протокол, который выглядит примерно так:Protobuf-с: Как упаковать вложенные сообщения
message Foo {
message Bar {
required string name = 1;
required string value = 2;
}
message Baz {
required Bar a = 1;
}
}
Учитывая этот файл протокола, мне нужно написать кодер с использованием 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?
Это имеет смысл. Однако, к сожалению, я не контролирую прото-файл. Протокол был разработан третьей стороной, и я должен использовать клиентское приложение, использующее его. Используя стандартную библиотеку C++ Protobuf, она работает так, как ожидалось. – darnir
@ darnir При повторном чтении я думаю, что неправильно понял ваш первоначальный вопрос. Меня отбросила «Сгенерированная структура для Foo, не содержит записи, которую я могу присвоить« mybaz ». - это ожидается, учитывая объявление типа. Но похоже, что вы действительно ищете, это способ сериализации структуры 'Baz' напрямую. Это должно быть обеспечено сгенерированным кодом, но возможно, что protobuf-c имеет ошибку и не генерирует такую функцию. Я бы подал на них ошибку. –