MessagePack编码/解码
在线MessagePack编码/解码工具,支持JSON与MessagePack互转、十六进制/Base64/C数组输出及字节查看,适用于网络协议调试和物联网联调
粘贴抓包、设备日志或接口返回中的 MessagePack 数据
点击插入示例数据
解码结果
输入 MessagePack 数据后自动解码并显示结果
MessagePack 协议文档
MessagePack 简介
MessagePack 是一种高效二进制序列化格式,目标是在保持与 JSON 类似数据模型的同时显著减少体积并提升解析效率,常用于网络协议、嵌入式设备和高性能服务通信。
编码结构
MessagePack 通过首字节区分类型与长度:部分类型可直接在首字节包含数据或长度,其余类型使用后续 1/2/4/8 字节补充长度或值。
| 格式字节 | 含义 |
|---|---|
| 0x00-0x7f | 正 fixint(0 到 127) |
| 0x80-0x8f | fixmap(0 到 15 对键值) |
| 0x90-0x9f | fixarray(0 到 15 个元素) |
| 0xa0-0xbf | fixstr(长度 0 到 31) |
| 0xc0 | nil |
| 0xc2/0xc3 | false/true |
| 0xcc-0xcf | uint8/16/32/64 |
| 0xd0-0xd3 | int8/16/32/64 |
| 0xdc/0xdd | array16/array32 |
| 0xde/0xdf | map16/map32 |
MessagePack 数据类型参考
| 类型 | 格式字节 | 说明 |
|---|---|---|
| 正整数 (fixint/uint) | 00-7f / cc-cf | 非负整数,自动按值大小选择编码长度 |
| 负整数 (fixint/int) | e0-ff / d0-d3 | 负整数,支持 8/16/32/64 位编码 |
| 浮点数 | ca/cb | 32 位或 64 位 IEEE 754 浮点数 |
| 字符串 | a0-bf / d9-db | UTF-8 文本,按长度使用 fixstr/str8/16/32 |
| 二进制 | c4-c6 | 原始字节序列,使用 bin8/16/32 |
| 数组 | 90-9f / dc-dd | 有序数据项集合,支持 fixarray/array16/array32 |
| 映射 | 80-8f / de-df | 键值对对象,支持 fixmap/map16/map32 |
| 扩展类型 | d4-d8 / c7-c9 | 应用自定义类型,-1 常用于 timestamp |
MessagePack 与 JSON 对比
两者表达的逻辑结构接近,但 MessagePack 面向二进制传输效率,JSON 面向文本可读性与人工编辑。
MessagePack 优势
- 体积更小,网络传输开销更低
- 编码解码速度高,适合高吞吐场景
- 保留二进制友好特性,便于协议扩展
- 与 JSON 结构接近,迁移成本较低
JSON 优势
- 纯文本可读,调试与排障直观
- 生态支持广,跨语言处理简单
- 可直接嵌入日志与配置文件
常见应用场景
- 物联网设备与网关之间的高频消息传输
- RPC 或微服务之间的二进制协议通信
- 游戏服务器状态同步和事件广播
- 边缘计算节点的紧凑数据交换
- 对体积敏感的移动端网络请求
扩展类型(Ext)说明
Ext 类型允许在标准类型外定义自有语义。常见约定中 ext type = -1 用于时间戳,其他类型编号由业务协议自行约定。
| Ext Type | 含义 |
|---|---|
| -1 | Timestamp 扩展类型(常见约定) |
| 0 | 业务自定义扩展类型 |
| 1-127 | 业务预留正类型区间 |
| -128--2 | 业务预留负类型区间 |