在线 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 二进制块的工程师而打造。一切都在你的浏览器中运行,因此你粘贴的字节在本地解码,绝不离开你的设备。

功能特性

如何使用 Protobuf 解码器

  1. 将你的 protobuf 载荷复制为 hex 字符串或 base64。
  2. 将其粘贴到「Protobuf message」框中。
  3. 将格式保持为「Auto」,或在检测有误时选择 Hex 或 Base64。
  4. 查看解码后的字段树,展开嵌套消息以检视各值。

示例

输入

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 字符串。

常见错误与故障排除

常见问题

我可以在没有 .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 格式解析器运行,因此你粘贴的字节在你的设备上处理,绝不会发送到服务器。

相关工具

全部 ArrayKit 工具