* KH-dha8 -(by [[K]], 2015.02.06) ** これはなに? -gh4やhh4の仲間で、シンプル化に重きを置いた(つまり効率はあまりよくない)バージョンです。 -名前の由来: --倍々方式が基本なので、doubleのd。 --エンコード長が先頭付近で分かるタイプなのでheaderのh。 --今後亜種を作るかもしれないので、とりあえずa型。 --8ビット単位のエンコード方式なので、8。 -そもそもの動機: --最大256ビットの整数値をエンコードする必要があって、でも毎回32バイトも書いていたら長くなってしょうがないので、可変長にして短くしたかった。 --hh4でもよかったんだけど、8bit単位に特化してもっとシンプルにできないかなーと思っていた。 ** フォーマット |0xxxxxxx|1バイト形式|0~0x7f(符号なしの場合)| |10xxxxxx_xxxxxxxx|2バイト形式|0~0x3fff(符号なしの場合)| |110xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx|4バイト形式|0~0x1fff_ffff(符号なしの場合)| |1110xxxx_..._xxxxxxxx|8バイト形式|0~0x0fff_ffff_ffff_ffff(符号なしの場合)| |11110xxx|未定義|| |111110xx|未定義|| |1111110x|未定義|| |11111110|拡張形式|エンコード長(ヘッダを含まずデータ部分のみの長さ)が後続| |11111111|1バイト形式|パディング用| -最短フォーマット: --0x7fまでなら1バイト形式(0xxxxxxx) --0x3fffまでなら2バイト形式(10xxxxxx_xxxxxxxx) --0x1fff_ffffまでなら4バイト形式(110xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) --0xffff_ffffまでなら6バイト形式(11111110_00000100_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) ** ついでに KH-dhb8 -KH-dha8に以下の仕様変更をしたもの: --1110xxxx : 拡張形式のコンパクト版。xxxx部分でエンコードバイト数-2を表すので、2~17が表現できる。 -最短フォーマット: --0x7fまでなら1バイト形式(0xxxxxxx) --0x3fffまでなら2バイト形式(10xxxxxx_xxxxxxxx) --0xffffまでなら3バイト形式(11100000_xxxxxxxx_xxxxxxxxx) --0x1fff_ffffまでなら4バイト形式(110xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) --0xffff_ffffまでなら5バイト形式(11100010_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) --0x00ff_ffff_ffffまでなら6バイト形式(11100011_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) --0xffff_ffff_ffffまでなら7バイト形式(11100100_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) --0x00ff_ffff_ffff_ffffまでなら8バイト形式(11100101_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) ** ついでに KH-dhc8 -KH-dha8に以下の仕様変更をしたもの: --110xxxxx_... を3バイト形式のヘッダとする(4バイト形式ではなく)。 --1110xxxx : 拡張形式のコンパクト版。xxxx部分でエンコードバイト数-3を表すので、3~18が表現できる。 --1110xxxx : 拡張形式のコンパクト版。xxxx部分でエンコードバイト数-4を表すので、4~19が表現できる。 --もはや倍々方式ではないのでdの名はふさわしくないが、名残でdh属のままとする。 -最短フォーマット: --0x7fまでなら1バイト形式(0xxxxxxx) --0x3fffまでなら2バイト形式(10xxxxxx_xxxxxxxx) --0x001f_ffffまでなら3バイト形式(110xxxxx_xxxxxxxx_xxxxxxxxx) --0x00ff_ffffまでなら4バイト形式(11100000_xxxxxxxx_xxxxxxxx_xxxxxxxx) --0xffff_ffffまでなら5バイト形式(11100001_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) --0x00ff_ffff_ffffまでなら6バイト形式(11100010_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) --0xffff_ffff_ffffまでなら7バイト形式(11100011_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) --0x00ff_ffff_ffff_ffffまでなら8バイト形式(11100100_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxx) * こめんと欄 #comment