Binäre Datei auslesen?!?!?!
-
hallo,
ich möchte mit diesem code eine binäre datei auslesen:
#include <iostream.h> #include <windows.h> #include <fstream.h> int main() { ifstream in; char trans[500]; in.open("e:\\test.mp3", ios::in | ios::binary); if(!in) { MessageBox(NULL,"Fehler beim öffnen","read",0); return; } in.read(trans,500); trans[in.gcount()]='\0'; cout << trans << endl << flush; return; }es kommt kein fehler,
aber auch wenn ich wie hier (nur zum test) 500 Zeichen auslesen möchte
erscheint auf dem bildschirm blos:MZÉ^^ da ist aber auf jedenfall mehr in der mp3-datei

wenn ich eine txt-datei mit diesem code öffne klappts perfekt!
woran lieg das?
-
In deiner MP3-Datei haben sich wohl ein paar '\0' eingeschlichen. Deswegen wird nur ein Teil der als String interpretierten Binärdaten ausgegeben.
Und du solltest nicht mehr <iostream.h> und Konsorten verwenden. Dazu gibt es <iostream>.
-
Harry H. Dein Code hat einen Fehler
trans[in.gcount()]='\0';ist in deinem Beispiel gleichbedeutend mit
trans[500] = '\0';Out of Range! Letzte Speicheradresse von trans ist trans[499] !

-
#include <windows.h> #include <iostream> #include <fstream> using namespace std; void main() { ifstream in; char trans[15000]; in.open("e:\\viagra.exe", ios::in | ios::binary); if(!in) { MessageBox(NULL,"Fehler beim öffnen","read",0); return; } in.read(trans,10000); trans[in.gcount()]='\0'; cout << trans << endl << flush; return; }habe meinen code nun dementsprechend angepasst aber das sollte ja auch nicht
zur lösung meines probs dartragen denke ich
also das mit den \0 in der mp3-datei kann ich nachvollziehen, wie kann ich das
denn ändern?also das beim auslesen trotzdem bis zum ende gegangen wird?
danke!
-
@haase
ja das hatte ich angepasst allerdings ist kein problem immernoch vorhanden!
-
Einen Algorithmus entwerfen der alle Nullzeichen im Programm entfernt (<-Spaß)
-
^^
aber es muss doch möglich sein binare dateien auszulesen
wie
wird das denn sonst gemacht?
-
Also ne Binärdaten mit cout am Bildschirm
ausgeben ist zumindest "schrill".
Wenns sein muss, lese deinen Speicherblock in ner Schleife
aus, immer bis nach der nächsten Null und
gebe mit cout aus bis das Speicherblockende erreicht ist.
-
for(int i = 0 ; i < in.gcount() ; ++i ) cout <<(int)trans[i] << ",";so vieleicht ?
:schland: :schland: Nach Berlin :schland: :schland:
-
ja ok...
also fakt ist das ich eine binare datei auslesen möchte und
übers netzwerk versenden möchte. aber nacher steht dann in der
über socket gesendeten datei nurMZÉdeswegen. wie kann ich also binar auslesen?!
ich mache das dicg eig. richtig oder??
-
so ich weis nun woran es lag

also ich habe mit "send" verschickt und halt als paramater
strlen(trans)übergeben, ich muss aber
in.gcount()übergeben
