8个发布版本
使用旧Rust 2015
| 0.3.3 | 2019年2月22日 |
|---|---|
| 0.3.2 | 2019年2月22日 |
| 0.2.2 | 2019年2月19日 |
| 0.1.0 | 2018年11月22日 |
2165 在 编码 中
每月下载量 26
在 set-encoding 中使用
7KB
TBE
截断二进制编码
https://en.wikipedia.org/wiki/Truncated_binary_encoding
k = floor_log2(n);
u = 2 * exp2(k) - n
编写
如果 x < u,则写入 x 的 k 个最低有效位;否则将 u 添加到 x,并写入 x 的 k 个最高有效位,然后写入 x 的最低有效位。
读取
- 读取
k位作为x。 - 如果
u<=x,则读取一个额外的位,并将其作为最低有效位添加到x,并从x中减去u。
示例(最高有效位优先)
n = 2
k = 1;
u = 4 - 2 = 2;
| BE | TBE | |
|---|---|---|
| 0 | 0 | |
| 1 | 1 | |
| n | u |
n = 3
k = 2;
u = 1
| BE | TBE(MSB) | TBE(LSB) | |
|---|---|---|---|
| 00 | 0X | 0X | |
| 01 | 10 | 10 | u |
| 10 | 11 | 11 |
n = 4
k = 2
u = 8 - 4 = 4
| BE | TBE | |
|---|---|---|
| 00 | 00 | |
| 01 | 01 | |
| 10 | 10 | |
| 11 | 11 | |
| n | u |
n = 5
k = 2;
u = 3;
| BE | TBE | |
|---|---|---|
| 000 | 00 | |
| 001 | 01 | |
| 010 | 10 | |
| 011 | 110 | u |
| 100 | 111 |
n = 6
k = 2;
u = 2;
| BE | TBE |
|---|---|
| 000 | 00 |
| 001 | 01 |
| 010 | 100 |
| 011 | 101 |
| 100 | 110 |
| 101 | 111 |
n = 7
| BE | TBE |
|---|---|
| 000 | 00 |
| 001 | 010 |
| 010 | 011 |
| 011 | 100 |
| 100 | 101 |
| 101 | 110 |
| 110 | 111 |
n = 10
k = 3;
u = 6;
| BE | TBE(MSB) | TBE(LSB) |
|---|---|---|
| 0000 | 000X | 000X |
| 0001 | 001X | 100X |
| 0010 | 010X | 010X |
| 0011 | 011X | 110X |
| 0100 | 100X | 001X |
| 0101 | 101X | 101X |
| 0110 | 1100 | 0110 |
| 0111 | 1101 | 0111 |
| 1000 | 1110 | 1110 |
| 1001 | 1111 | 1111 |
依赖
~170KB