2016-09-27 8 views
0

LEB128またはLittle Endian Base 128フォーマットについて混乱しています。 AOSPソースコードLeb128.javaでは、その読み取り関数の戻り値の型は、符号付きか符号なしかにかかわらず、intです。私はintのサイズがJavaで4バイト(別名32bits)であることを知っています。しかし、AOSPのLEB128の最大長は、という5バイトです。だからどこが失われたのか3bitsAndroid LEB128タイプのサイズ

ご返信ありがとうございます。

答えて

3

LEBの各データバイトは、実際の出力では7ビットしか占めません。残りのビットは、それが最後かどうかを示すために使用されます。 Wikipediaから

バイナリ数を表す第一の符号なしLEB128を使用して符号なしの数を符号化するために。次に、最大7ビットがすべて0でないように、7ビットの倍数までゼロを拡張します。番号を7ビットのグループに分割します。最下位から最上位までの7ビットグループごとにエンコードされた1バイトを出力します。

余分なビットは、「データの終わりであるかどうかを示すために使用される」ほどではありません。

あなたは、任意の32ビット値を符号化することを期待することはできません

それらのいくつかは4バイト以上を取るなく、それらのいくつかを4バイト未満を取ります。

+0

ご返信ありがとうございます。私は余分なビットがデータの終わりを示すことを知っています。私は、LEBには、ほとんどが「7ビット* 5バイト= 35ビット」と混同していました。しかし、戻り値の型は 'int'でサイズは' 32bits 'です。 LEBが 'int'を圧縮する形式であることが分かりました。それは正しい? – litao3rd

+0

@ litao3rd:私はあなたのコメントを本当に理解していないのですが、*ほとんど* 5バイトのデータを使用している場合、LEBは悪い選択です。ポイントは* 4バイト未満のほとんどの値を表すことです...そうでなければ、値ごとに固定された4バイトを使うこともできます。そして、はい、5バイトの値を書き込む場合、上位3ビットは0でなければなりません。 –

+0

LEB形式では、データのために35バイトの文字がほとんどです。 LEB128は、サイズが32ビットの 'int'を格納するために使われます。だから、それは十分です。私はちょうどそのサイズについて混乱しました。おかげさまで私の英語には申し訳ありません。 – litao3rd

関連する問題