是否可以通过编程方式转储Google协议缓冲区数据包?

时间:2019-07-19 19:15:53

标签: protocol-buffers protoc

如果将数据包数据保存为二进制文件,则可以通过protoc -decode运行它,以将数据转储为格式化的文本表示形式。

我想知道是否有任何功能可以以编程方式将二进制数据转储为格式化文本?我的代码使用JavaScript,但是C ++也可以。

一种方法是生成protoc作为后台进程并将结果返回。但是,我不能选择将protoc可执行文件本身与我的代码捆绑在一起。问候。

2 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是在JS中创建一个流,然后使用protoc解码发布进程,这将起作用,因为您可以将流绑定到protoc进程或线程(线程可以读取缓冲区,然后发布处理)。如果您没有任何性能要求,则可以使用。要解决该问题,您可以创建一个与JavaScript应用程序的c ++绑定。这样可以确保一定程度的效率。

答案 1 :(得分:0)

您可以使用google::protobuf::compiler::CommandLineInterfacegoogle::protobuf::compiler::cpp::CppGenerator界面来实现protoc可以做的一切。

#include <google/protobuf/compiler/command_line_interface.h>
#include <google/protobuf/compiler/cpp/cpp_generator.h>

int dump() {
    const char *argv[] = {"dumper", "--decode_raw"};
    google::protobuf::compiler::CommandLineInterface cli;
    google::protobuf::compiler::cpp::CppGenerator cpp_generator;
    cli.RegisterGenerator("--cpp_out", &cpp_generator, "Generate C++ source and header.");
    return cli.Run(sizeof(argv) / sizeof(char*), argv);
}

int main() {
    return dump();
}

将以上代码构建到bin:dumper中,并按如下所示运行它:

cat your-binary-file | ./dumper