返回

MessagePack / CBOR 编解码

数据互转

正在载入

正在加载工具

工具代码会在打开时按需载入,请稍候。

本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。

关于这个工具

编码 JSON 或带类型 JSON,在本地检查二进制数据,不上传输入。 普通 JSON 的整数词元精确保留;小数/指数使用 binary64,必须能往返为同一十进制值。字节、非字符串键及特殊值请使用带类型 JSON。解码始终输出带类型 JSON。

常见用途

  • 在本地检查 .msgpack 或 .cbor 文件,无需上传。
  • 将 API 测试数据在 JSON、带类型 JSON、Hex 与 Base64 之间转换。
  • 验证精确 64 位标识符、二进制字段和非字符串映射键。

使用方法

  1. 1.选择 MessagePack 或 CBOR,以及编码或解码。
  2. 2.编码时选择普通或带类型 JSON;解码时粘贴 Hex/Base64 或选择二进制文件。
  3. 3.转换后检查完整带类型输出,可复制或下载。解码后的二进制下载保留源字节;取消或修改输入会丢弃旧结果。

带类型输入的精确示例

示例 1 · msgpack

msgpack
["null"]
c0

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 2 · cbor

cbor
["null"]
f6

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 3 · msgpack

msgpack
["int","9007199254740993"]
cf0020000000000001

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 4 · cbor

cbor
["int","18446744073709551615"]
1bffffffffffffffff

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 5 · msgpack

msgpack
["bytes","00ff"]
c40200ff

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 6 · cbor

cbor
["bytes","00ff"]
4200ff

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 7 · msgpack

msgpack
["float","-0"]
cb8000000000000000

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 8 · cbor

cbor
["map",[[["int","7"],["str","x"]]]]
a1076178

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 9 · msgpack

msgpack
["ext",7,"00ff"]
d50700ff

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 10 · cbor

cbor
["tag","2",["bytes","010000000000000000"]]
c249010000000000000000

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 11 · cbor

cbor
["undefined"]
f7

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 12 · cbor

cbor
["simple",16]
f0

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

示例 13 · msgpack

msgpack
["array",[["bool",true],["str","猫"]]]
92c3a3e78cab

选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。

常见输入错误

  • 映射或对象有重复键;未丢弃任何值。
  • 请使用规范标准 Base64,保留必需的填充。
  • 不支持不定长 CBOR。
  • 整数超出该格式原生范围;需要时可使用 CBOR 大数标签及字节。
  • 映射键仅支持字符串、整数、字节、布尔或 null。

限制与说明

  • 二进制输入/输出不超过 262,144 字节;文本不超过 1,048,576 UTF-8 字节;带类型输出不超过 2,097,152 字节。JSON 语法和二进制值:深度不超过 32,值数量不超过 10,000。工作线程限时 5 秒。
  • 映射键仅支持字符串、整数、字节、布尔或 null;拒绝重复键。CBOR 标签原样保留(含大数标签);MessagePack 扩展 -1 检查原始时间戳格式,0–127 作为不透明数据保留。不解释标签,不支持不定长、复合/浮点键或连续多个值。
  • MessagePack 原生整数范围为 −2^63 至 2^64−1;CBOR 为 −2^64 至 2^64−1。更大的 CBOR 整数使用不透明标签 2/3 加字节串表示。整数元组文本最多 128 字符。
  • Float16/32/64 解码为 binary64 语义值。负零、NaN 和无穷使用显式元组;编码浮点使用 float64。重新编码不保留原宽度和 NaN 载荷位。
  • JSON 语法本身限制 32 层及 10,000 个值,带类型 JSON 的包装也计入,因此可能先于二进制 32 层达到限制。输出超限会拒绝,不会截断。

常见问题

为什么解码结果不是普通 JSON?

JSON 原生不支持字节、扩展、标签、undefined、NaN 或非字符串键。每个值使用明确的带类型元组,用户对象不会误变成控制标记。

CBOR 标签会被验证或执行吗?

标签保留无符号 64 位编号及原始包裹值;不解释日期、大数、嵌入 CBOR、URL、正则等应用含义,也不验证其业务载荷。不会执行嵌入字节或代码。

能恢复完全相同的二进制吗?

解码后下载二进制会保留原始字节。解码后重新编码保留受支持的语义值,但宽度或 NaN 位可能不同。映射保留输入顺序,不声称规范化编码。

0.1 会怎样处理?

编码为最接近的 binary64 值,以显式浮点元组表示。十进制词元必须通过 binary64 最短十进制表示往返而不改变十进制值;过高精度、溢出和非零下溢会拒绝。

相关工具