ランレングスのデータ構造がわかりません


WWWBBをW3B2にすると圧縮できる、というのは理解できました。しかし、11111000ならどうでしょうか?

1503と圧縮してしまうと展開時に1503と展開も出来てしまいます。

そこで1:5 0:3のように [繰り返す文字:繰り返し回数] と言うフォーマットをとれば正しく展開できます。

ただ、ここでいうコロンとスペースをバイナリでうまく表現ができません。ランレングスは一体どのようにして"圧縮"しているのでしょうか?




Run
Lengthのフォーマットに決まりはないので圧縮後にどのようなデータ構造にするかは用途によります。データにアルファベットしか出現しないことが分かっているのであれば`WWWBB`を`W3B2`と圧縮しても問題ないわけです。

任意のバイト列を表現したいなら、単純に繰り返すバイトと繰り返し回数を連続させるだけでもOKです。

例えば`11111000`(`0x31 0x31 0x31 0x31 0x31 0x30 0x30 0x30`) なら`0x31 0x05 0x30
0x03`のように圧縮できます。




Run
Lengthのフォーマットに決まりはないので圧縮後にどのようなデータ構造にするかは用途によります。データにアルファベットしか出現しないことが分かっているのであれば`WWWBB`を`W3B2`と圧縮しても問題ないわけです。

任意のバイト列を表現したいなら、単純に繰り返すバイトと繰り返し回数を連続させるだけでもOKです。

例えば`11111000`(`0x31 0x31 0x31 0x31 0x31 0x30 0x30 0x30`) なら`0x31 0x05 0x30
0x03`のように圧縮できます。

