2009-07-29 12 views
2

Edit: Ich versuche, eine Textdatei in Bytes zu konvertieren. Ich bin mir nicht sicher, ob der Code es in Bytes umwandelt oder nicht. Hier ist der Link zum Header, damit Sie die as_bytes-Funktion sehen können.Binärdatei E/A-Probleme

link

#include "std_lib_facilities.h" 

int main() 
{ 
    cout << "Enter input file name.\n"; 
    string file; 
    cin >> file; 
    ifstream in(file.c_str(), ios::binary); 

    int i; 
    vector<int> bin; 

    while(in.read(as_bytes(i), sizeof(int))) 
     bin.push_back(i); 

    ofstream out(file.c_str(), ios::out); 

    for(int i = 0; i < bin.size(); ++i) 
      out << bin[i]; 

    keep_window_open(); 
} 

Beachten Sie, dass jetzt die aus Strom, den Inhalt des Vektors gibt nur. Es verwendet nicht die Schreibfunktion oder den Binärmodus. Dies wandelt die Datei in eine große Zahlenreihe um - suche ich danach?

Hier ist ein Beispiel für die Dateikonvertierung des zweiten Code:

that guy likes to eat lots of pie (not sure if this was exact text) 

wendet sich an

543518319544825700191924850016351970295432362115448292821701667182186922608417526375411952522351186935715718643976841768956006 
+0

Hallo, was genau meinst du mit binär? Was erwarten Sie? –

+0

Es soll binäre Dateien lesen und schreiben, nicht unbedingt die Textdatei in ihre binäre Entsprechung ändern. Ich werde die Frage bearbeiten. – trikker

+0

Weitgehend bearbeitet, um besser zu verdeutlichen, was ich zu erreichen versuche. – trikker

Antwort

2

Der Grund Ihre erste Methode ist, hat die Datei nicht geändert werden, da alle Dateien in der gespeicherten gleicher Weg. Der einzige "Unterschied" zwischen Textdateien und Binärdateien besteht darin, dass Textdateien nur Bytes enthalten, die als ASCII-Zeichen dargestellt werden können, während Binärdateien * eine viel zufällige Vielfalt und Reihenfolge von Bytes aufweisen. Sie lesen also Bytes als Bytes und geben sie dann wieder als Bytes aus!

* Ich bin Unicode-Textdateien binär, da sie mehrere Bytes haben können, um einen Zeichenpunkt zu bezeichnen, abhängig vom Zeichenpunkt und der verwendeten Codierung.

Die zweite Methode ist auch ziemlich einfach. Sie lesen die Bytes wie zuvor und speichern sie in Ganzzahlen (die wahrscheinlich 4 Byte lang sind). Dann drucken Sie nur die ganzen Zahlen aus, als ob sie ganze Zahlen wären, also sehen Sie eine Reihe von Zahlen.

Warum deine erste Methode einige Bytes abgeschnitten hat, hast du recht, dass es wahrscheinlich ein Fehler in deinem Code ist. Ich dachte, es wäre wichtiger zu erklären, was die Ideen in diesem Fall sind, als einen Testcode zu debuggen.

+0

Ja, das ist es, was ich meine, sie als Bytes zu lesen, anstatt die eigentlichen Wörter. Das Buch bezieht sich jedoch immer noch auf sie als Binärdateien. – trikker

+0

Alle Dateien sind Binärdateien, der Öffnungsmodus bestimmt nur, wie der Inhalt gelesen und behandelt wird, z. Wenn Sie eine Datei im Textmodus öffnen und ein '\ n' Wert gefunden wird, wird dieser als Zeilenumbruch interpretiert. Wenn er im Binärmodus geöffnet wird, wird er nicht interpretiert. –

+0

Also was ich versuche, ist, sie in ihrer Byte-Form zu halten und sie als solche auszugeben. Und schließlich verwandelt sich die Bytes zurück in die Worte, die sie waren. Ich habe keine Ahnung, ob ich auf dem richtigen Weg bin oder nicht. – trikker