普贤教程 › 包参考
protobuf 包
Protocol Buffers wire format 动态编解码
| 项 | 值 |
|---|---|
| 包名 | protobuf |
| 版本 | 0.2.0 |
| 可用版本 | 0.1.0 / 0.2.0 |
| 入口 | protobuf.px |
| 分类 | 数据格式与编解码 |
| 文件数 / 行数 | 1 / 323 |
安装与引入
bash
pxpkg init # 首次 pxpkg add protobuf@0.2.0 pxpkg install
px
import protobuf所属分类教程:数据格式与编解码
公开接口
| 函数 | 参数 |
|---|---|
pb_encode | schema, obj |
pb_decode | schema, data |
其余 14 个 def(内部与辅助,可直接调用但不属稳定接口)
| 函数 | 参数 |
|---|---|
pb_byte | v |
pb_enc_varint | v |
pb_dec_varint | data, ip |
pb_zigzag | v |
pb_zigzag32 | v |
pb_unzigzag | z |
pb_wire | type |
pb_key | fno, wire |
pb_enc_value | type, v, sub_schema |
pb_skip | data, ip, wire |
pb_dec_value | type, data, ip, len_ |
pb_encode_field | fno, type, value |
pb_decode_field | data, ip |
pb_size | schema, obj |
包内说明(源码头注释)
text
============================================================
普贤生态库:registry/protobuf —— Protocol Buffers wire format 动态编解码
------------------------------------------------------------
纯函数库(无 IO、无状态),编译(px build)与解释(px run)双模式一致。
对应缺口表「Protocol Buffers」的最小可实现面(wire format,免 .proto 编译):
schema = {"1": {"type": "int32"}, "2": {"type": "string"},
"8": {"type": "message", "fields": {...}}}
pb_encode(schema, {"1": 150, "2": "hello", ...}) → Ok(bytes)
pb_decode(schema, data) → Ok(dict)
支持类型与 wire 映射:
varint 族:int32/int64/uint32/uint64/bool/enum(补码 64 位,负→10 字节)
sint32/sint64(zigzag);fixed32/sfixed32/float(4B);fixed64/sfixed64/double(8B)
长度域:string/bytes/message(嵌套递归)
说明:
- 未知字段跳过(解码不报错);对象缺字段 → 不编码
- int 为 64 位有符号:uint64 > 2^63-1 无法表示,文档注明
- 字段号与类型经 schema 约束,无 .proto 编译面
============================================================
单字节 bytes