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>.

    www.cppreference.com



  • 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 nur

    MZÉ
    

    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 😉


Anmelden zum Antworten