头部格式
每个 .ttp 文件头部固定为 26 字节。
字段表
| 偏移 | 大小 | 类型 | 说明 |
|---|---|---|---|
| 0 | 4 | bytes | 魔数 TTP\x01(0x54 0x54 0x50 0x01) |
| 4 | 4 | uint32 LE | 版本号,当前为 1 |
| 8 | 1 | bitfield | 配置字节 0(见下方位域) |
| 9 | 1 | uint8 | 保留字节,当前必须为 0 |
| 10 | 2 | uint16 LE | 当前卷序号,从 1 开始 |
| 12 | 2 | uint16 LE | 总卷数,最小为 1 |
| 14 | 4 | uint32 LE | 本卷数据长度——后跟的数据字节数 |
| 18 | 8 | bytes | 自定义配置字节,官方解析器忽略,默认全 0 |
| 26 | 头部总长 |
配置字节 0 位域
| 位 | 名称 | 说明 |
|---|---|---|
| b0–b1 | Compression | 00 → LZMA(默认),01 → Brotli,10 → Deflate,11 → 保留 |
| b2–b3 | LZMA Dict | 00 → 32 MiB,01 → 64 MiB(默认),10 → 128 MiB,11 → 256 MiB |
| b4 | HasCustom | 0 = 无自定义数据段,1 = B区包含自定义数据段 |
| b5 | HasManifest | 0 = 无 Manifest,1 = B区包含 Manifest |
| b6 | Encrypted | 0 = 不加密,1 = A区使用 AES-256 加密 |
| b7 | 保留 | 必须为 0 |
约束:当 Compression 不为
00(LZMA)时,b2–b3 必须设置为00,解包器必须忽略非 LZMA 模式下的 b2–b3。
编码示例
假设一个 LZMA 压缩、64 MiB 字典、有 Manifest、有自定义数据、A区加密的单卷文件:
| 字段 | 值 |
|---|---|
| Compression | LZMA → bits0-1 = 00 |
| LZMA Dict | 64 MiB → bits2-3 = 01 |
| HasCustom | 1 → bit4 = 1 |
| HasManifest | 1 → bit5 = 1 |
| Encrypted | 1 → bit6 = 1 |
| config byte 0 | `00 |
