Probleme beim einlesen einer Binär Datei



  • Hallo,

    ich probiere eine Binärdatei einzulesen. Bis jetzt habe ich folgenden Code geschrieben.

    #include <fstream>
    #include <iostream>
    
    using namespace std;
    
    int main (void) {
    
    	short id;
    	char *buffer;
    
    	fstream mapfile;
    
    	mapfile.open("resource.map", ios::in | ios::binary);
    
    	mapfile.read(buffer, 2);
    

    In buffer habe ich jetzt auch die ersten 2 Byte der Datei stehen. Diese möchte ich jetzt gerne im Little Endian Format in die Variable id schreiben.

    Meine Versuche sind bis jetzt leider erfolgos.
    Vielleicht kann mir einer von euch helfen?



  • Funktioniert das so wie du das geschrieben hast? 🤡

    Du solltest noch Speicher für deinen Buffer allozieren. Denn bis nun hast du nur einen Pointer der ins Nirvana zeigt. Und Windows [/andere OSs] verbieten es meistens ins Nirvana zu schreiben.

    char buffer[2];
    
    // oder
    
    char *buffer = new char[2];
    /* ... */
    delete[] buffer;
    

    Des weiteren solltest du das void bei den Übergabeparametern von main weglassen, sieht nur hässlich nach C-Style aus.
    Da die meisten x86 heute mit Little Endian arbeiten (stimmt doch oder?) könntest du das einfach kopieren:

    id = *(reinterpret_cast<short*>(buffer));
    

    Oder direkt einlesen:

    short id;
    char *pointer = reinterpret_cast<char*>(&id);
    mapfile.pointer(buffer, 2);
    

    Gruß



  • Danke, das obere hat funktioniert.

    Nur verstehe ich die Zeile nicht ganz.

    mapfile.pointer(buffer, 2);
    


  • Sollte natürlich .read(...) heißen... Ist wohl schon zu spät 🙄

    Gruß


Anmelden zum Antworten