ハフマンコーディングの宿題に取り組んでいます。ハフマン アルゴリズムは既に完成していますが、バイナリ ファイルで動作するように少し変更する必要があります。関連する問題を読むのに時間を費やしましたが、おそらくデータ型とバイナリ ファイルの理解が不足しているため、まだ少し苦労しているので、以前の質問を繰り返さないことを願っています (関連するコードは投稿しません)プログラムのハフマン部分に)。
キー フレーズは次のとおりです。「コードワードにマップされる各シンボルは 4 バイトのバイナリ文字列であると想定できます。」そして、私が知っていると思うのは、Char は 1 バイトを表し、unsigned int は 4 バイトを表すということです。 、そのため、一度に入力 4 バイトを unsigned int バッファーに読み取ってから、プログラムのハフマン部分のデータを収集する必要があると推測しています。
int main() {
unsigned int buffer;
fstream input;
input.open("test.txt", ios::in | ios::binary);
while(input) {
input.read(reinterpret_cast<char *>(&buffer), 4);
//if buffer does not exist as unique symbol in collection of data add it
//if buffer exists update statistics of symbol
}
input.close();
}
これはデータを処理する良い方法のように見えますか? 1、2、または 3 バイトしか残っていない場合、ファイルの最後をどのように処理すればよいですか? そのため、バッファを unsigned int として構造体に格納しています。好奇心から、バッファを文字列に再キャストするにはどうすればよいですか?
編集:ハフマン圧縮ファイルのヘッダーを保存する最良の方法は何ですか?