次のハフマン符号化記号があるとします。
A-0 B-10C-110D-111そしてシーケンスをエンコードしたい
ABAACDADBBの場合、次のようなバイナリコードを取得します:01000110 11101111 010
(01000110)= 0x46(11101111)= 0xEF
010 = ???? このコードに010がない場合は、これらのバイトをファイルに保存できます。この010をどのように処理すればよいですか?00000010として保存しますか?それは機能しません。
次のハフマン符号化記号があるとします。
A-0 B-10C-110D-111そしてシーケンスをエンコードしたい
ABAACDADBBの場合、次のようなバイナリコードを取得します:01000110 11101111 010
(01000110)= 0x46(11101111)= 0xEF
010 = ???? このコードに010がない場合は、これらのバイトをファイルに保存できます。この010をどのように処理すればよいですか?00000010として保存しますか?それは機能しません。
エンコードされたデータにはヘッダーが必要です(この目的には1バイトで十分ですが、実際に必要なものによってはさらに必要になる場合があります)。最後のデータバイトにあるパディングビットの数を格納できます。したがって、010
ヘッダーバイトを使用した例で5
は、最後のバイトの最後に無視する必要のある5ビットがあるため、が含まれます。
実際に役立つビットに格納されている値を見つけることは、コードを2バイトに分割する可能性のある重複するコードを持つ可能性があるため、ビットごとに処理する必要がありますN
。バイトにオーバーラップしますN+1
。
終了したことを示す終了バイトを含めることができます。その後、最後のデータバイトに格納されたアイテムの数を示す別のバイトを含めることができます。次に、実際に重要なビット数を把握して、最後のバイトから残りの文字を並べ替えることができます。