Datei => Byte Array
-
Hallo, versuche mich gerade an einem Programm dass eine beliebige Datei in ein ByteArray umwandelt.
Das ist mein Code bis jetzt:
int main() { fstream fIn, fOut; fIn.open( "in", ios_base::in ); fOut.open( "out.txt", ios_base::out ); if( fIn.is_open() == false ) return 0; fOut << "BYTE out[] = \n{"; int CurrentByte, BytesWritten = 0; while( true ) { if( fIn.peek() == EOF ) break; CurrentByte = fIn.get(); if( BytesWritten % 4 == 0 && BytesWritten >= 4 ) fOut << ",\n\t"; else fOut << ", "; fOut << "0x" << hex << CurrentByte; ++BytesWritten; } fOut << endl << "};"; fOut.close(); fIn.close(); cout << "ByteArray written to Out.txt!" << endl; cin.get(); }Es funktioniert auch so weit bei kleinen Dateien, aber sobald ich dann zb eine Musikdatei in einem ByteArray haben möchte, returned fIn.peek() EOF wo eigentlich garnicht EOF sein sollte.
Beispiel:
BYTE out[] = { 0x49, 0x44, 0x33, 0x3, 0x0, 0x0, 0x0, 0x0, 0x10, 0x3d, 0x54, 0x50, 0x45, 0x32, 0x0, 0x0, .... (viele zeilen..) 0xff, 0xfb, 0xa0, 0x40, 0xd, 0x0, 0x3, 0x6f, 0x3f, 0x42, 0x1, 0x81 };Nach 0x81 returned fIn.peek() plötzlich EOF, aber wenn ich mir die Datei in einem HexEditor anschaue sehe ich folgendes:
42 01 81 1A E2 6F AE 68 40 2C
Es geht praktisch nach 0x81 sehr wohl noch weiter, ich habe aber keine Ahnung warum fIn.peek() dann EOF returned. Hat hier einer eine Idee?
-
Das die Datei irgendwie kaputt ist, kann nicht sein, oder?
-
1. Was kommt den nach dem letzten Zeichen das noch gelesen wurde?
2. ASCII 0x1a ?
3. Versuch doch mal zu googeln, was der Code bedeutet
4. Ich denke Du willst das file binär einlesenHave fun
-
ja, als ich bei google gesucht hatte, hatte ich auch erfahren dass die io klassen wohl Probleme mit 0x1a haben. Habe aber nicht gefunden wie man 0x1a doch einlesen kann. Weiß das hier einer? :p
-
Ok, denke ich habs, wenn ich die datei so öffne
fIn.open( "in", ios_base::in | ios_base::binary );Liest er auch 0x1a ein!
