px普贤教程PuXian
普贤教程 › 包参考

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_encodeschema, obj
pb_decodeschema, data
其余 14 个 def(内部与辅助,可直接调用但不属稳定接口)
函数参数
pb_bytev
pb_enc_varintv
pb_dec_varintdata, ip
pb_zigzagv
pb_zigzag32v
pb_unzigzagz
pb_wiretype
pb_keyfno, wire
pb_enc_valuetype, v, sub_schema
pb_skipdata, ip, wire
pb_dec_valuetype, data, ip, len_
pb_encode_fieldfno, type, value
pb_decode_fielddata, ip
pb_sizeschema, 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