Frage zum Schreiben/Lesen binärer Dateien



  • Servus,

    da ich in meiner plattformübergreifenden Bibliothek die Serialisation auch über binäre Dateien möglich machen möchte, kommen immer mehr Probleme auf mich zu.

    Gründe dafür sind die nicht festgelegten größen der C++ Datentypen sowie Big-/Little-Endian.

    Was würdet ihr mir vorschlagen? (Bitte kommt mir jetzt nicht mit XML oder sonstigen Textdateien, es soll jetzt wirklich nur ums binäre Format gehen)

    Vielen Dank schonmal!



  • Binäres format == plattformabhängig



  • Knuddlbaer schrieb:

    Binäres format == plattformabhängig

    Immer? Was ist dann mit so Sachen wie ZIP-Archiven?



  • Immer? Was ist dann mit so Sachen wie ZIP-Archiven?

    Da wird ein Standard festgelegt und die Programme müssen evtl. entsprechend umrechnen.



  • zip archive sind genauso abhängig

    struct ZipHeader
    {
        DWORD Signature;
        WORD  VersionNeeded;
        WORD  GeneralPurpose;
        WORD  CompressionMethod;
        WORD  LastModTime;
        WORD  LastModDate;
        DWORD CRC32;
        DWORD CompressedSize;
        DWORD UncompressedSize;
        WORD  FilenameLength;
        WORD  ExtraLength;
    };
    


  • Warum werden sie dann trotzdem auf verschiedenen Betriebssystemen gleich behandelt?



  • Was meinst du? Gleichbehandelt? Der Quelltext der verschiedenen (Ent)Packer wird sich wohl unterscheiden.



  • es gibt für jedes betriebssystem ein andres zip programm,oder was meinste, warum es auf windows WINzip heist?^^



  • Wenn du platformübergreifend arbeiten musst, wäre es sinnvoll entweder deiner
    Datei einen Header voranzustellen, in dem diese Größen definiert sind. Als erstes
    Element eine Byte in dem du Little/Big Endian definierst, danach die Größen der
    einzelnen Dateitypen z.B. in int32 gespeichert. Damit kannst du dann platformunabhängig die Daten auslesen.

    Oder du definierst die in einem Papierdokument.
    - Diese Datei ist im Little Endian Format geschrieben
    - int ist 16 Bit lang
    - long int ist ...

    Dann kannst du diese Datei auch in jedem Betriebssystem lesen, da du ja dann weist wie die Daten abgelegt sind. Typischer weise liest man dies Daten dann Bytweise und sortiert sie nach dem Lesen in die richtige Reihenfolge und Größe.

    Ich gehe davon aus das das Zip Format den zweiten Weg gegangen ist.

    Wenn du Datensätze mit mehreren Elemente binäer in ein Datenfile schreiben willst, solltest du die Inhalte des Datensatzes einzeln schreiben und nicht blockweise als Strukturen, weil du sonst noch Probleme mit dem Alignment der Daten in der Struktur Probleme bekommst.


Anmelden zum Antworten