* hh4エンコードについて -(by [[K]], 2014.08.13) ** (0) -フロントエンドコードや、バックエンドコードを理解するために、hh4の説明が必要になったので書いてみます。 ** (1) -一般に数値データを記述する際には、8ビットずつに区切ったり32ビットずつに区切ったりしますが、hh4ではこの区切る幅を数値に合わせて増減できる「可変長エンコード」です。 -一般に数値データを記述する際には8ビットずつに区切ったり32ビットずつに区切ったりしますが、hh4ではこの区切る幅を数値に合わせて増減できる「可変長エンコード」です。 -4ビットの倍数で長さを選択できます。 ** (2) 符号なし整数で、0~0xfffをエンコード -0は次のいずれの方法でも記述できます。 --0(4ビット) --80(8ビット) : 0x80を加算して書く --c00 (12ビット) : 0xc00を加算して書く --e000(16ビット) : 0xe000を加算して書く -基本フォーマット: --4ビット形式で表現できるのは、0x0~0x6です(エンコード結果:0~6)。 --8ビット形式で表現できるのは、0x00~0x3fです(エンコード結果:80~bf)。 --12ビット形式で表現できるのは、0x000~0x1ffです(エンコード結果:c00~dff)。 --16ビット形式で表現できるのは、0x000~0xfffです(エンコード結果:e000~efff)。 -パディング: --エンコードデータの前に任意個のfをつけることができます。これを付加しても値は変化しません。 --f0、ff0、f80、これらはすべて0を意味します。f0は4ビットモードの0ですし、ff0も4ビットモードの0ですし、f80は8ビットモードの0です。 -複数の数値を並べるときは、このように書きます。 --{ 0x1, 0x23, 0x456 } の場合: 1a3e456 -> 1a 3e 45 6? ** (3) 拡張モード -より大きなビット幅のために拡張モードがあります。拡張モードはまず"7"を書き、その後に長さをあらわす数値が後続し、その後に数値本体をおきます。 -0x1234の例: --741234(24ビット) --7501234(28ビット) --76001234(32ビット) --7870001234(40ビット) --78800001234(44ビット) -拡張モードの前にも任意個のfをおくことができます。 * こめんと欄 #comment