ecko-lang/struct

GitHub: ecko-lang/struct

Ecko 语言的二进制数据编解码库,通过 struct 风格的格式字符串实现二进制数据的打包与解包。

Stars: 0 | Forks: 0

# Struct - Ecko Std Lib 包 使用 struct 风格的格式字符串对二进制数据进行打包和解包,适用于 [Ecko](https://ecko.sh) - 使用 Ecko 编写,基于 `bytes` 类型。非常适合用于 二进制文件格式和通信协议(类似于 redis/postgres 客户端通常手动实现的组帧方式)。 基于 `bytes` 和字运算符(`band`/`shl`/`shr`/`bor`)构建。 ## 安装 ``` ecko get github.com/ecko-sh/struct ``` ## 用法 ``` import struct # big-endian: uint32, uint16, uint8 b = struct.pack(">IHB", [65536, 256, 7]) # -> 7 bytes fields = struct.unpack(">IHB", b) # -> [65536, 256, 7] struct.sizeof(">IHBq") # 15 ``` ## 格式 一个可选的字节序前缀,随后每个值对应一个类型代码: | 前缀 | 含义 | |---|---| | `>` | big-endian(**默认**) | | `<` | little-endian | | `!` | 网络字节序(big-endian) | | 代码 | 类型 | 字节 | | 代码 | 类型 | 字节 | |---|---|---|---|---|---|---| | `b` / `B` | int8 / uint8 | 1 | | `i` / `I` | int32 / uint32 | 4 | | `h` / `H` | int16 / uint16 | 2 | | `q` / `Q` | int64 / uint64 | 8 | | `x` | 填充字节(跳过) | 1 | | | | | 小写表示有符号,大写表示无符号。 ## API | 函数 | 描述 | |---|---| | `pack(fmt, values)` | 将整数列表编码为 `bytes` | | `unpack(fmt, data)` | 将 `bytes` 解码为整数列表 | | `sizeof(fmt)` | 格式的总字节数 | ## 注意事项 - 有符号值在任何宽度下都能正确往返(二进制补码)。 - Ecko 的 `Int` 是 `i64`,因此大于 `i64::MAX` 的 `Q` (uint64) 值会变成负数 - 即其原始位模式。这是该抽象发生泄漏的唯一情况。 - 未知的格式代码会引发 `"value"` 类型的错误。 ## 测试 ``` ecko test tests/ ``` 离线且确定性的。`example.ecko` 会构建并读取一个小的数据包头。 ## 许可证 MIT - 请参阅 [LICENSE](LICENSE)。
标签:Ecko, SOC Prime, 二进制数据, 内核驱动, 序列化, 开发工具, 标准库, 网络协议