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 編碼常見於資料壓縮、網路通訊協定以及儲存系統等場景,在這些場景中,自分界與 prefix‑free 的特性非常重要,特別適合用來在同一條位元流中存放多個長度不一的整數。