【问题标题】:Deducing Protobuf Schema and Datatypes推导 Protobuf 模式和数据类型
【发布时间】:2017-05-23 18:55:46
【问题描述】:

我有许多 protobuf 文件,但没有 .proto 架构文件!

cat myfile.pbuf | protoc --decode_raw > outputfile.txt

使用上面的命令,我能够将文件解码为可读的 protobuf 格式 (Thanks):

1: 1
2: ""
2 {
  1: 0x40133f7ced916873
  2: 0x3ff70e5604189375
  3: 0xbfd23d70a3d70a3d
  4: 0x3fb999999999999a
}
2 {
  1: 0x4022e7ef9db22d0e
  2: 0x4006ed916872b021
  3: 0xbfe1cac083126e98
  4: 0x3fc999999999999a
}
2 {
  1: 0x402bdcac083126e9
  2: 0x40111374bc6a7efa
  3: 0xbfe9fbe76c8b4396
  4: 0x3fd3333333333333
}
2 {
  1: 0x40324147ae147ae1
  2: 0x401696872b020c4a
  3: 0xbff0e147ae147ae1
  4: 0x3fd999999999999a
}
...

我知道没有模式我无法知道这些值的含义,但我想知道是否还有其他方法可以推断出这种奇怪之处! protobuf documentation 似乎表明数字数据以 2 或 4 字节块的形式提供,我可以轻松地将其转换为整数或浮点数。

我的数据不适合这种格式,但我知道它是数字数据!我从未见过带有十六进制 x 表示法的 protobuf 文件,并且有 16 个字节(对于单个数字来说太多了!)。

这可能是什么数据类型,是否可以在没有架构的情况下进一步解码,1, 2, 3, 4 有用还是重要?

【问题讨论】:

    标签: types schema protocol-buffers decode protobuf-c


    【解决方案1】:

    这些十六进制值实际上是 8 个字节,而不是 16 个。因此可以想象这些值可能是 int64s、uint64s 或 double。 1、2、3 和 4 似乎是重复消息中的字段编号。除了手动检查数据并尝试猜测含义之外,没有其他简单的方法可以进一步解码。

    【讨论】:

      猜你喜欢
      • 2018-10-30
      • 2012-09-08
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      相关资源
      最近更新 更多