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

bytes_pack 包

二进制 pack/unpack

项值
包名bytes_pack
版本0.2.0
可用版本0.1.0 / 0.2.0
入口bytes_pack.px
分类数据格式与编解码
文件数 / 行数1 / 259

安装与引入

bash
pxpkg init          # 首次
pxpkg add bytes_pack@0.2.0
pxpkg install
px
import bytes_pack
所属分类教程:数据格式与编解码

公开接口

函数参数
bp_packfmt, args
bp_unpack_fromfmt, data, off
bp_unpackfmt, data
bp_sizefmt
其余 16 个 def(内部与辅助,可直接调用但不属稳定接口)
函数参数
bp_parse_unitfmt, i
bp_parse_endianfmt
bp_parsefmt
bp_check_rangen, size, signed
bp_pow2bits
bp_unpack_unitdata, off, size, kind, endian
bp_pack_u16_len
bp_pack_u16_ben
bp_pack_u32_len
bp_pack_u32_ben
bp_unpack_u16_ledata, off
bp_unpack_u16_bedata, off
bp_unpack_u32_ledata, off
bp_unpack_u32_bedata, off
bp_pack_strings
bp_unpack_stringdata, off

包内说明(源码头注释)

text
============================================================
普贤生态库:registry/bytes_pack —— 二进制 pack/unpack
------------------------------------------------------------
纯函数库(无 IO、无状态),编译(px build)与解释(px run)双模式一致。
bp_size(fmt)               → Ok(int) | Err   格式固定长度(字节数)
bp_pack(fmt, args)         → Ok(bytes) | Err 按格式打包
bp_unpack(fmt, data)       → Ok([值...]) | Err  自偏移 0 解包(须恰好消费完)
bp_unpack_from(fmt, data, off) → Ok([新偏移, [值...]]) | Err  从 off 解包
格式:
字节序前缀(可省略,默认 ">" 大端/网络序):
类型符:
B u8 / b i8 / H u16 / h i16 / I u32 / i i32 / L u32 / l i32 / Q u64 / q i64
f f32 / d f64
重复前缀:如 "4B" = 4 个 u8;无前缀 = 1 个
已知限制:
- Q 仅保证 0..2^63-1 可表示范围(PuXian int 为 i64;超出自动回绕为负,调用方注意)
- 不支持对齐填充(0.2.0 视需要加)
实现说明:
- 整数转换收敛到原生 int_to_bytes/bytes_to_int(PX-DEF-019/020 已由 M186 修复,
endian/signed 三轨可靠);float 走 float32_bits/float64_bits + bits_to_float32/64
- 范围/长度/格式错误一律 Err(不静默截断)
============================================================
---- 内部:格式解析 ----
解析一个类型符 + 重复数 → [size, signed, count, 剩余串索引];失败返回 null