有没有办法以编程方式转储谷歌协议缓冲区数据包



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

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

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

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

您可以使用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

最新更新