无需登录 数据私有 本地保存

Protobuf 在线解码器 - 原始字节转可读结构

22
0
0
0

Protobuf 在线解码器

将 Protocol Buffers 原始字节数据解码为可读结构 · 支持 Hex / Base64 输入

输入数据并点击"解码"查看结果

常见问题与知识点

Protocol Buffers(简称 Protobuf)是 Google 开发的一种语言中立、平台中立的可扩展序列化结构数据格式。它比 XML 和 JSON 更小、更快、更简单。Protobuf 使用二进制格式编码数据,通过 .proto 文件定义消息结构,然后自动生成序列化/反序列化代码。广泛应用于 gRPC、微服务通信、数据存储等场景。

Protobuf 的二进制格式(Wire Format)使用 Tag-Length-Value 结构。每个字段以一个 Varint 编码的 Key 开头,Key = (field_number << 3) | wire_type。Wire Type 决定了后续数据的读取方式:Varint(0)、64-bit(1)、Length-delimited(2)、32-bit(5)。Group(3/4)已在 proto3 中废弃。这种编码方式使得 Protobuf 非常紧凑高效。

Varint(可变长度整数)是 Protobuf 的核心编码技术。每个字节的最高位(MSB)作为继续位:1 表示还有后续字节,0 表示这是最后一个字节;低 7 位存储实际数据,采用小端序排列。例如:数值 150 的 Varint 编码为 0x96 0x01(二进制:10010110 00000001)。这种编码对于小数值非常高效,只需 1-2 个字节即可表示。

Wire Type编码适用类型数据长度
0Varintint32, int64, uint32, uint64, sint32, sint64, bool, enum可变
164-bitfixed64, sfixed64, double固定 8 字节
2Length-delimitedstring, bytes, 嵌套消息, packed repeated由 Varint 长度指定
3Start Groupgroups (proto3 已废弃)-
4End Groupgroups (proto3 已废弃)-
532-bitfixed32, sfixed32, float固定 4 字节
注:Wire Type 6 和 7 为保留值,正常情况下不应出现。

可以!即使没有 .proto 定义文件,本工具也能解析 Protobuf 的 Wire Format 底层结构。你将看到每个字段的编号(Field Number)、Wire Type 和原始值。对于 Length-delimited 类型,工具还会自动尝试:作为嵌套 Protobuf 消息递归解析、作为 UTF-8 字符串读取、以及显示原始十六进制字节。这让逆向工程和调试变得非常方便。

Protobuf 优势:二进制编码体积小(比 JSON 小 3-10 倍)、序列化/反序列化速度快、强类型约束减少错误、支持向后兼容的 schema 演进、gRPC 原生支持。
JSON 优势:人类可读、无需预定义 schema、所有语言原生支持、调试方便、适合 Web API 和配置文件。
适用场景:Protobuf 适合高性能微服务通信、数据存储;JSON 适合 Web 前端交互、配置和日志。