CBOR 编解码器
CBOR 二进制数据格式编码与解码
粘贴从网络抓包、物联网设备或 API 响应中获取的 CBOR 数据
点击插入示例数据
解码结果
输入 CBOR 数据并点击解码查看结果
字节查看器
输入有效的 JSON 数据以编码为 CBOR
容器长度编码
- Compact: 使用最小字节(≤23 个元素时使用 fixmap/fixarray)
- Explicit 16-bit: 始终使用 2 字节长度(0xB9/0x99 前缀)
- Explicit 32-bit: 始终使用 4 字节长度(0xBA/0x9A 前缀)
- Indefinite: 使用不定长度编码,以终止码结束(0xBF...0xFF)
点击插入 JSON 示例
编码结果
输入 JSON 数据并点击编码生成 CBOR
字节查看器
编码统计
CBOR 数据类型参考
| 主类型 | 类型名称 | 头部字节 | 说明 |
|---|---|---|---|
| 0 | 无符号整数 | 0x00-0x1B | 0 到 2^64-1 的非负整数 |
| 1 | 负整数 | 0x20-0x3B | -1 到 -2^64 的负整数 |
| 2 | 字节串 | 0x40-0x5B | 任意长度的原始二进制数据 |
| 3 | 文本串 | 0x60-0x7B | UTF-8 编码的文本字符串 |
| 4 | 数组 | 0x80-0x9B | 有序数据项集合 |
| 5 | 映射 | 0xA0-0xBB | 键值对(对象) |
| 6 | 标签 | 0xC0-0xDB | 扩展类型的语义标签 |
| 7 | 简单值/浮点 | 0xE0-0xFB | 布尔值、null、undefined 和浮点数 |
CBOR 协议文档
CBOR 简介
CBOR(简明二进制对象表示)是 RFC 8949 定义的二进制数据序列化格式。作为 JSON 的紧凑替代方案,CBOR 将结构化数据编码为高效的二进制形式,同时保持与 JSON 数据模型的兼容性。该格式具有自描述特性,解码器无需外部模式定义即可解析数据。CBOR 专为物联网设备和嵌入式系统等资源受限环境设计,在这些场景中带宽和处理能力都是宝贵资源。
二进制编码结构
每个 CBOR 数据项都以一个包含两个字段的字节开始:主类型(3 位)和附加信息(5 位)。主类型决定数据类别(整数、字符串、数组等),附加信息指示参数长度或直接保存小值。这种紧凑的头部设计意味着像小整数这样的简单值只需要一个字节。
| 附加信息 | 含义 |
|---|---|
| 0-23 | 值直接编码(0-23) |
| 24 | 后跟 1 字节无符号数 |
| 25 | 后跟 2 字节无符号数(大端序) |
| 26 | 后跟 4 字节无符号数(大端序) |
| 27 | 后跟 8 字节无符号数(大端序) |
| 31 | 不定长度(用于字符串、数组、映射) |
容器长度编码选项
CBOR 提供了灵活的容器(数组和映射)长度编码方式。虽然所有有效编码产生语义上相同的数据,但二进制表示不同。本工具提供四种编码模式以满足不同的系统需求。
编码示例:{"name":"Alice","age":30}
相同的 JSON 对象可以用多种有效方式编码:
| 模式 | 头部字节 | 说明 |
|---|---|---|
| Compact | A2 ... | 0xA2 = fixmap(2),最小编码 |
| Explicit 16-bit | B9 00 02 ... | 0xB9 = map16,后跟 2 字节长度 |
| Explicit 32-bit | BA 00 00 00 02 ... | 0xBA = map32,后跟 4 字节长度 |
| Indefinite | BF ... FF | 0xBF = 不定长 map,以 0xFF 终止 |
四种编码解码后得到相同的 JSON。选择紧凑模式以获得最小体积,显式长度用于协议兼容性,不定长度用于流式场景。
CBOR 与 JSON 对比
两种格式表示相同的逻辑数据模型,但服务于不同目的。CBOR 优先考虑紧凑编码和处理效率,而 JSON 强调人类可读性和通用的文本互操作性。
- 编码体积更小(通常节省 30-50%)
- 原生支持二进制数据
- 解析和编码速度更快
- 内置日期、URI 等语义标签
- 人类可读可编辑
- 浏览器和编程语言普遍支持
- 调试和日志记录更方便
常见应用场景
- 物联网设备通信和传感器数据传输
- WebAuthn/FIDO2 身份认证协议
- COSE(CBOR 对象签名与加密)安全应用
- CoAP(受限应用协议)消息传递
- 嵌入式系统配置和数据存储
语义标签
CBOR 标签为数据项提供语义含义。标签是可选的包装器,指示应如何解释封装的值,从而实现基本数据类型之外的类型扩展。
| 标签编号 | 语义含义 |
|---|---|
| 0 | 标准日期时间字符串(RFC 3339) |
| 1 | 基于纪元的日期时间(Unix 时间戳) |
| 2 | 正大整数 |
| 3 | 负大整数 |
| 32 | URI 引用 |
| 55799 | CBOR 自描述(魔数标记) |