2

私は古いファイル形式を文書化していますが、次の問題で困惑しています。

整数は可変長でエンコードされ、数値 <=0x7Fは 1 バイトでエンコードされているようですが、>=0x80は 2 バイトでエンコードされているようです。整数とそれに対応するエンコードされたもののセットの例:

  • 0x390としてエンコードされます0x9007
  • 0x150としてエンコードされます0xD002
  • 0x82としてエンコードされます0x8201
  • 0x89としてエンコードされます0x8901

よりも大きい数値にまだ遭遇していない0xFFFFため、それらがエンコードされているかどうか、またはどのようにエンコードされているかはわかりません。私の人生では、ここでパターンを理解することはできません。何か案は?

4

1 に答える 1

7

一見すると、数値は 7 ビットのチャンクに分割されているように見えます。各チャンクは、出力バイトの最下位 7 ビットとしてエンコードされます。最上位ビットは、このバイトの後にさらにバイトがあるかどうかを示します (つまり、最後のエンコードされた整数のバイトの MSB は 0 です)。

入力の最下位ビットが最初に来るので、これを「リトルエンディアン」と呼ぶことができると思います。

編集: https://en.wikipedia.org/wiki/Variable-length_quantityを参照(これは MIDI および Google プロトコル バッファで使用されます)

于 2012-12-31T00:26:39.080 に答える