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.