2017-05-28 2 views
0

Ich bin mit der Decodierung mit Huffman-Algorithmus stecken. Kurz im Abschnitt Dekomprimierung liest ifstream den Wert 0x1A als -1, der das Ende der Datei angibt. Woher?Lesen der Binärdatei Ausgabe

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

haben Sie Ihren Stream im Binärmodus ('' 'std :: ios :: binary''') geöffnet? auch, 'get()' gibt 'EOF' zurück (was normalerweise -1 ist), Sie haben das Ende der Datei erreicht. –

+3

Sie sollten wahrscheinlich ein wenig mehr von Ihrem Code teilen. Offensichtlich ist C++ in der Lage, Binärdateien zu öffnen und Huffman-kodierte Daten zu entschlüsseln. Das Problem liegt also in etwas, das Sie nicht mit uns geteilt haben. – Rook

+2

'ifstream :: get 'gibt ein' int' zurück, das mit 'eof()' value (das ist typischerweise -1) verglichen und dann in 'char' umgewandelt werden soll. In Ihrem Code-Snippet ist keine Datei geöffnet, sodass das Lesen aus dem Stream nicht möglich ist und Sie nur EOF erhalten. – VTT

Antwort

0

Einige Betriebssysteme wie Windows, verwenden Sie Strg-Z (0x1A) Dateien das Ende Text darzustellen.

Versuchen Öffnung im Binär-Modus:

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

Binary-Modus bedeutet, nicht auf die von der Eingabedatei gelesenen Daten keine Übersetzungen anzuwenden.

+0

Es funktionierte tatsächlich mit nur "ios :: binary" -Argument hinzufügen. Danke vielmals! –