ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
数値の表現方法の一つで、8ビット長の可変長とするもの。
コンピューターの性能は向上し、32ビット、64ビット、128ビットなど、扱える数値の長さも増えていった。
しかし、日常的に使う値は小さな値が多く、64ビットや128ビットをフルに扱い続ける業務はそう多くはない。そこで作られたのが、小さな値は短く符号化される可変長の表現形式である。
LEB128のB128は、Base 128の意である。Base 128は、データを128種類の値の可変長とするものである。
128=27であり、つまり7ビット単位で数値は扱われる。
unsigned LEB128と、signed LEB128がある。
両者を自動的に識別する手段はないため、デコーダーは、予めどちらかを知っている必要がある。
7ビットを値の表現に用い、最上位ビット(MSB)を継続の有無を表わすフラグに使う。
MSBが1であれば継続があり、0ならそのバイトで終了となる。
また、下位バイトから順番に記録される。これは、UTF-8のように上位バイトから記録するものとはちょうど逆になる。
例えば、10進で344865(= 0x54321)を符号化した場合、次のようになるだろう。
そして、実際の出力は下位バイトからなので「0xA1 0x86 0x15」の順に出力(ファイルに記録)される。
signedの場合も、符号化方法は同様である。
符号化する前に数値は2の補数形式とする。また、自動的に符号拡張する前提であり、このため出力する値の最上位ビットが1になっている場合、残る7ビットすべて1になるようなバイトを出力する必要はない。
例えば、10進で-344865(= 0xFFFABCDF)を符号化した場合、次のようになるだろう。
そして、実際の出力は下位バイトからなので「0xDF 0xF9 0x6A」の順に出力(ファイルに記録)される。
デコードして出てきた結果の値の最上位(この場合はビット20)が1であるので、32ビット値にするにせよ64ビット以上の値にするにせよ、上位は全て1で埋めて負の数として復号することになる。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます