> comma | self | delimit <
// Comma 编码 —— 自动识别边界的自分界二进制代码
0 字符
0 字符
[SELF-DELIMIT]
自分界
无需在连续代码之间插入额外分隔符。
[SIMPLE]
结构简单
一元长度前缀,后接实际数据比特。
[TABOO]
模式规避
taboo 变体可在需要时规避特定比特模式(如 11)。
>> 技术说明
Comma 编码的工作原理:
Comma 编码将整数 n 编码为:1)将位长 L-1 以一元形式写出(L-1 个 1 后跟一个 0);2)追加去掉首位 1 的二进制表示。taboo 变体会调整编码以避免像 11 这样的模式,在某些通信信道中非常实用。
Comma 编码示例:
Basic Comma Code: 0 → 0 (special case) 1 → 01 (0 ones + 0 + empty) 2 → 100 (1 one + 0 + '0') 3 → 101 (1 one + 0 + '1') 4 → 11000 (2 ones + 0 + '00') 5 → 11001 (2 ones + 0 + '01') Concatenated: 1,2,3 → 01 100 101 → 01100101 Self-delimiting - can decode without separators Taboo variant avoids '11' pattern: Uses different encoding to prevent consecutive 1s
为什么选择 Comma 编码:
- ▸天然自分界,无需额外长度字段
- ▸无需显式分隔符
- ▸实现简单、易于调试
- ▸可以规避敏感比特模式
- ▸前缀码(prefix‑free),解码无二义性
>> 常见问题
什么是 Comma 编码?
Comma 编码是一种自分界二进制编码,通过一元长度前缀加数据比特来表示整数。之所以叫 “Comma”,是因为多个代码可以像列表中的元素一样直接拼接,而不需要额外分隔符。
它为什么是自分界的?
一元长度前缀精确告诉解码器接下来有多少个数据比特。当你看到 k 个 1 后跟一个 0 时,就知道接下来要读取恰好 k 个比特。这使得多个编码可以连续拼接而不依赖显式分隔符。
什么是 taboo 变体?
taboo Comma 编码通过改变编码方式来避免特定的比特模式(例如 11)。在某些通道中,特定模式可能表示控制符或同步标记,此时 taboo 变体就非常有用。
Comma 编码通常用在哪些场景?
Comma 编码常用于数据压缩、网络协议以及存储系统等场景,在这些场景中“自分界、前缀无歧义”的特性非常重要,尤其适合在一个比特流中存放多个变长整数。