python - 将二进制文件转换为 proto 文件

标签 python protocol-buffers

服务器返回了我的二进制文件 -- https://pastebin.com/E4jxdF0W

我想找到二进制文件的.proto结构

所以,我将文件添加到站点 - https://protogen.marcgravell.com/decode/

已收到

enter image description here

我创建了原型(prototype)文件(但没有收到有效文本)

我应该改变我的原型(prototype)结构什么?

syntax = "proto2";

    message Cities {
      repeated City city = 1;
    }
    
    message City {
      optional string name = 2;
      optional string name2 = 3;
      optional string name3 = 4;
      optional string name4 = 5;
      optional string name5 = 6;
      optional string name6 = 7;
      optional int32 name7 = 8;
      optional int32 name8 = 9;
      optional int32 name9 = 10;
      optional string name10 = 11;
    }

更新1 我用过

protoc --decode_raw < binary_file.protobuf

并收到结果

1 {
  1: "U\222\017\352c\021\021\346\204\237RT\000\020\266\010"
  2: "\320\241\320\260\320\275\320\272\321\202-\320\237\320\265\321\202\320\265\321\200\320\261\321\203\321\200\320\263"
  4 {
    1: 0x426fc1a3
    2: 0x41f286ea
  }
  5: "\320\241\320\260\320\275\320\272\321\202-\320\237\320\265\321\202\320\265\321\200\320\261\321\203\321\200\320\263"
  5: "\320\241\320\260\320\275\320\272\321\202-\320\237\320\265\321\202\320\265\321\200\320\261\321\203\321\200\320\263\320\260"
  5: "\320\241\320\260\320\275\320\272\321\202-\320\237\320\265\321\202\320\265\321\200\320\261\321\203\321\200\320\263\321\203"
  5: "\320\241\320\260\320\275\320\272\321\202-\320\237\320\265\321\202\320\265\321\200\320\261\321\203\321\200\320\263"
  5: "\320\241\320\260\320\275\320\272\321\202-\320\237\320\265\321\202\320\265\321\200\320\261\321\203\321\200\320\263\320\276\320\274"
  5: "\320\241\320\260\320\275\320\272\321\202-\320\237\320\265\321\202\320\265\321\200\320\261\321\203\321\200\320\263\320\265"
  5: "\320\241\320\260\320\275\320\272\321\202-\320\237\320\265\321\202\320\265\321\200\320\261\321\203\321\200\320\263\320\265"
  6: "sankt-peterburg"
  7: 2
}
2 {
  1: "\224\331\203\202B\303\021\346\224\031RT\000\020\266\010"
  2: "\260\336\t\360I\026I\006\217\232t\2021T\030B"
  3: "\320\237\321\217\321\202\321\221\321\200\320\276\321\207\320\272\320\260"
  4: "https://leonardo.edadeal.io/dyn/re/retailers/images/icons/sq/85cd6908f8a34aefbe66dd1948cc3d39.png"
  5: "https://leonardo.edadeal.io/dyn/re/retailers/images/logos/sq/992af68cffaa47de9ff23079648074ad.png"
  6: "eb2316"
  7: 733
  8: 55
  9: 425
  10: "5ka"
}
2 {
  1: "\224\331\205\336B\303\021\346\224\031RT\000\020\266\010"
  2: "\260\336\t\360I\026I\006\217\232t\2021T\030B"
  3: "\320\224\320\270\320\272\321\201\320\270"
  4: "https://leonardo.edadeal.io/dyn/re/retailers/images/icons/sq/146db05ebc81464cbf4872675cb2e761.png"
  5: "https://leonardo.edadeal.io/dyn/re/retailers/images/logos/sq/9c2b2c291f134929949fa4daab88252f.png"
  6: "FF8A38"
  7: 691
  8: 61
  9: 276
  10: "dixy"
}

最佳答案

如果您无法获取架构,这很大程度上是基于试验和错误的。但是,我可以告诉您,这里的根对象看起来不像一个列表(重复) - 这是真的

  1. 每个子项目都将具有相同的字段编号(它们没有,1 vs 2)
  2. 每个子项目都具有相同的形状(但事实并非如此,请参阅字段 4,文本与子对象)

所以你的根对象有类似的东西:

optional Foo foo = 1;
optional Bar bar = 2;

关于python - 将二进制文件转换为 proto 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64303115/

相关文章:

python - 我如何写入父字典?

python - 在 jupyter notebook 中重现示例 pivottable.js

python - 如何判断程序是否打开

go - 无法在ubuntu中为golang编译proto文件

java - Protobuf如何多次接收字符串和对象

go - 生成 Golang grpc + 自定义 proto 对象

python - 区分具有未知数量变量的 sympy 函数

python - 通过python分割一个大的csv文件

objective-c - Objective-C 中 protobuf 编译文件的问题

spring - 将 Spring Boot 与 gRPC 和 Protobuf 一起使用