在线 Protobuf 解码器
无需 .proto 模式即可解码 Protocol Buffers 二进制消息,就在你的浏览器中。你的字节留在你的设备上。
你的 protobuf 字节在浏览器本地解码,绝不会上传,但请避免将含有真实机密或个人数据的消息粘贴到任何工具中。
需要改为解码 JWT?试试 JWT 解码器。
关于 Protobuf 解码器
这款 protobuf 解码器直接从字节读取 Protocol Buffers 二进制消息,无需任何 .proto 文件。将载荷以 hex 或 base64 粘贴,解码器便会遍历原始的 wire 格式:它读取每个 tag 以恢复字段号和 wire 类型,然后解读其值。Varint 会以 int64、uint64 和 zig-zag 读法显示;fixed64 和 fixed32 字段会暴露其整数、double 和 float 视图;而长度分隔字段会先尝试作为嵌套消息,再作为 UTF-8 文本,最后作为原始 hex 字节。结果会渲染为一棵带缩进的字段树,重复字段归在同一字段号下。它专为调试 gRPC 流量、抓包数据或来自日志的不透明 proto 二进制块的工程师而打造。一切都在你的浏览器中运行,因此你粘贴的字节在本地解码,绝不离开你的设备。
功能特性
- 无需 .proto 模式即可从原始字节解码任意 Protocol Buffers 消息
- 接受 hex 或 base64 输入,支持自动检测和手动格式切换
- 从 tag 读取 varint、fixed64、长度分隔和 fixed32 这些 wire 类型
- 将 varint 显示为 int64、uint64、有符号 zig-zag 和布尔解读
- 将 fixed64/fixed32 字段渲染为整数、double 和 float 视图以及原始字节
- 递归解码嵌套消息,并回退为 UTF-8 字符串或 hex 字节
- 在带缩进的树中将重复字段归在同一字段号下
- 对截断、畸形或非 protobuf 的输入报告清晰的错误
如何使用 Protobuf 解码器
- 将你的 protobuf 载荷复制为 hex 字符串或 base64。
- 将其粘贴到「Protobuf message」框中。
- 将格式保持为「Auto」,或在检测有误时选择 Hex 或 Base64。
- 查看解码后的字段树,展开嵌套消息以检视各值。
示例
输入
08 96 01 12 07 74 65 73 74 69 6e 67
输出
#1 varint wire 0 150
#2 string wire 2 "testing"
字段 1 是 varint (150),字段 2 是一个长度分隔的 UTF-8 字符串。
常见错误与故障排除
- 解码器显示「Input is not valid hex」或「Input is not valid base64」。 — 切换格式开关以匹配你的数据,或去掉多余字符;hex 必须是 0-9a-f 的成对字符,而 base64 必须使用标准或 URL 安全字母表。
- 本应是字符串的字段被渲染成了嵌套消息或原始 hex。 — 没有 .proto 文件时,解码器只能从字节猜测;长度分隔字段具有歧义,因此恰好看起来像文本的子消息(或反之)可能被误读。
- 解码失败并提示「Length-delimited field runs past the end of the input」。 — 载荷被截断,或根本不是 protobuf。请重新抓取完整消息,并确认你复制了每一个字节,包括末尾的字节。
- Group wire 类型报告为不支持。 — wire 类型 3 和 4(start-group/end-group)在 protobuf 中已弃用且极少生成;请改用 proto2/proto3 字段而非 group 来重新编码该消息。
常见问题
- 我可以在没有 .proto 文件的情况下解码 protobuf 吗?
- 可以。这款 protobuf 解码器读取原始的 wire 格式,因此它能直接从字节恢复每个字段号、wire 类型和值。没有模式时,它无法得知原始的字段名,也无法得知某个数字本意是有符号、无符号还是枚举值,因此它会并排显示各种可能的解读。
- protobuf 的各种 wire 类型是什么意思?
- 每个字段 tag 都编码了一个 wire 类型:0 是 varint(整数、布尔、枚举),1 是 fixed64(sfixed64、double),2 是长度分隔(字符串、字节和嵌套消息),5 是 fixed32(sfixed32、float)。解码器会为每个字段标注其 wire 类型,让你能将其对回源定义。
- 我应该把 protobuf 粘贴为 hex 还是 base64?
- 两者都行。将开关保持为「Auto」,工具便会检测格式;干净的 hex(成对的十六进制数字,可带可选的空格、冒号或 0x 前缀)会被当作 hex 读取,其余一切都被视为 base64,包括 URL 安全的 base64。如果你的数据有歧义,请手动切换开关。
- 为什么一个 varint 会被显示为好几个不同的数字?
- 一个 protobuf varint 可以表示 int64、uint64 或 zig-zag 编码的 sint64,而 wire 格式并不记录究竟是哪一种。解码器会把它们全部打印出来,外加对 0 和 1 的布尔解读,让你能挑选与你的模式相符的解读。
- 解码后的载荷会被上传到任何地方吗?
- 不会。protobuf 解码完全在你的浏览器中、使用一个纯 JavaScript 的 wire 格式解析器运行,因此你粘贴的字节在你的设备上处理,绝不会发送到服务器。
相关工具
- Base64 编码 / 解码 — 安全的 UTF-8 Base64 编码与解码。
- JSON 格式化工具 — 美化、压缩并验证 JSON,并定位错误位置。
- JSON 转代码 — 从 JSON 生成 Go、Rust、Python、Java、Kotlin、C# 和 TypeScript 类型。
- 哈希生成器 — 通过 Web Crypto API 生成 SHA-256 / SHA-1 / SHA-384 / SHA-512。
- JWT 解码器 — 解码 JWT 的头部和载荷,并查看 exp/iat(不做验证)。
- 进制转换工具 — 在二进制、八进制、十进制和十六进制之间转换整数。
全部 ArrayKit 工具