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, 二进制数据, 内核驱动, 序列化, 开发工具, 标准库, 网络协议