hh4エンコードについて
(0)
- フロントエンドコードや、バックエンドコードを理解するために、hh4の説明が必要になったので書いてみます。
(1)
- 一般に数値データを記述する際には、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をおくことができます。
こめんと欄