2017-05-28 17 views
0

私はハフマンアルゴリズムを使用してデコードに固執しています。解凍セクションの短い部分ifstreamは、ファイルの終わりを示す-1として0x1Aの値を読み込みます。どうして?バイナリファイルの問題を読む

ifstream compressed_file; 
buffer = compressed_file.get(); 
+2

ストリームをバイナリモード( '' 'std :: ios :: binary''')で開いたことはありますか? 'get()'は 'EOF'を返します(通常は-1)。ファイルの最後に達しました。 –

+3

あなたのコードをもう少し共有してください。明らかに、C++はバイナリファイルを開き、ハフマン符号化されたデータをデコードすることができるので、問題はあなたが私たちと共有していないものにあります。 – Rook

+2

'ifstream :: get'は' eof() '値(通常は-1)と比較され、次に' char'にキャストされる 'int'を返します。コードスニペットでは、ファイルは開かれていないので、ストリームからの読み取りは不可能であり、EOFのみを提供します。 – VTT

答えて

0

Windowsなど一部のオペレーティングシステムは、テキストファイルの終わりを表現するには、Ctrl-Z(0x1A)を使用します。バイナリモードで

てみ開口部:

ifstream compressed_file("My_File.dat", ios::binary); 
compressed_file.read(buffer, quantity); 

バイナリモードでは、入力ファイルから読み取られたデータに任意の変換を適用しないことを意味します。

+0

実際には、 "ios :: binary"引数を追加するだけで動作しました。どうもありがとう! –

関連する問題