在没有模式的情况下读取 Protobuf 数据
Read Protobuf data without schema
一个是原始数据,一个是网络分析器转换后的数据。如何使用 C# 将数据转换为网络分析器?我没有模型。
如果您没有架构,坦率地说,您需要对架构进行逆向工程。或者追查数据来源,获取已有数据,通常更容易。
Protobuf 是一种没有它的模棱两可的格式,如果解码许多 "wire types",就没有唯一正确的方法。您可以使用 protoc
(在解码原始模式下)或 https://protogen.marcgravell.com/decode 之类的工具来尝试破译原始数据以尝试将模式放在一起,但这有点乏味并且通常需要一些知识数据应该。例如,"variant" - 在 varint 步骤之后 - 可能是:
- 枚举
- 一个二进制补码有符号整数
- 一个二进制补码无符号整数
- 锯齿形有符号整数
加上最后 3 个选项,相同的负载可以是 32 位或 64 位(这不会改变值,但如果后面的值更大,可能会发生变化)。
如果您需要帮助,我也许可以看看 - 我已经多次对 protobuf 模式进行逆向工程。
如果您只想对已解释的流进行原始访问,protobuf-net 有一个 ProtoReader
类型,其工作原理与 XmlReader
等广泛,可能会对您有所帮助。但是上面描述的所有歧义都会保留。
一个是原始数据,一个是网络分析器转换后的数据。如何使用 C# 将数据转换为网络分析器?我没有模型。
如果您没有架构,坦率地说,您需要对架构进行逆向工程。或者追查数据来源,获取已有数据,通常更容易。
Protobuf 是一种没有它的模棱两可的格式,如果解码许多 "wire types",就没有唯一正确的方法。您可以使用 protoc
(在解码原始模式下)或 https://protogen.marcgravell.com/decode 之类的工具来尝试破译原始数据以尝试将模式放在一起,但这有点乏味并且通常需要一些知识数据应该。例如,"variant" - 在 varint 步骤之后 - 可能是:
- 枚举
- 一个二进制补码有符号整数
- 一个二进制补码无符号整数
- 锯齿形有符号整数
加上最后 3 个选项,相同的负载可以是 32 位或 64 位(这不会改变值,但如果后面的值更大,可能会发生变化)。
如果您需要帮助,我也许可以看看 - 我已经多次对 protobuf 模式进行逆向工程。
如果您只想对已解释的流进行原始访问,protobuf-net 有一个 ProtoReader
类型,其工作原理与 XmlReader
等广泛,可能会对您有所帮助。但是上面描述的所有歧义都会保留。