CBOR编码/解码
在线CBOR编码/解码工具,支持JSON与CBOR互转、十六进制/Base64/C数组输出及长度模式控制,适用于物联网协议调试和嵌入式联调
粘贴从网络抓包、物联网设备或 API 响应中获取的 CBOR 数据
点击插入示例数据
解码结果
输入 CBOR 数据后自动解码并显示结果
CBOR 协议文档
CBOR 简介
CBOR(简明二进制对象表示)是 RFC 8949 定义的二进制序列化格式。它在保持与 JSON 数据模型兼容的同时,提供更紧凑的编码和更高的处理效率,适合物联网、嵌入式与安全认证场景。
二进制编码结构
每个 CBOR 数据项以 1 字节起始,前 3 位为主类型,后 5 位为附加信息。附加信息既可直接表示小值,也可表示后续长度字段的字节数。
| 附加信息 | 含义 |
|---|---|
| 0-23 | 值直接编码在附加信息中 |
| 24 | 后跟 1 字节无符号数 |
| 25 | 后跟 2 字节无符号数(大端) |
| 26 | 后跟 4 字节无符号数(大端) |
| 27 | 后跟 8 字节无符号数(大端) |
| 31 | 不定长度容器,终止码为 0xFF |
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 与浮点数 |
容器长度编码选项
数组和映射可以采用不同长度模式编码。虽然语义相同,但二进制表现不同,常用于兼容不同协议和网关要求。
| 模式 | 头部字节 | 说明 |
|---|---|---|
| 紧凑模式 | A2 ... | 最小长度编码,优先紧凑表示 |
| 显式 16 位 | B9 00 02 ... | 固定使用 2 字节长度 |
| 显式 32 位 | BA 00 00 00 02 ... | 固定使用 4 字节长度 |
| 不定长度 | BF ... FF | 不定长度容器,适合流式构建 |
CBOR 与 JSON 对比
两种格式表示相同逻辑结构。JSON 更偏向文本可读性,CBOR 更偏向体积与性能。
CBOR 优势
- 编码体积更小,网络传输开销更低
- 原生支持二进制数据
- 解析和编码速度通常更快
- 支持语义标签扩展复杂类型
JSON 优势
- 人类可读,便于快速查看
- 浏览器和语言生态支持广泛
- 日志和排查过程更直观
常见应用场景
- 物联网设备通信和传感器数据传输
- WebAuthn/FIDO2 身份认证协议数据分析
- COSE(CBOR 对象签名与加密)安全应用
- CoAP(受限应用协议)消息传递
- 嵌入式系统配置和数据存储
语义标签
标签用于为 CBOR 数据增加语义解释,使解码端在不改变基础结构的前提下理解更丰富的数据类型。
| 标签编号 | 语义含义 |
|---|---|
| 0 | 标准日期时间字符串(RFC 3339) |
| 1 | 基于纪元的日期时间(Unix 时间戳) |
| 2 | 正大整数 |
| 3 | 负大整数 |
| 32 | URI 引用 |
| 55799 | CBOR 自描述标记 |