encode | decode | delimit

> 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 编码常用于数据压缩、网络协议以及存储系统等场景,在这些场景中“自分界、前缀无歧义”的特性非常重要,尤其适合在一个比特流中存放多个变长整数。