Ich versuche, eine lange (signiert, 4 Bytes) aus einer Binärdatei in C++ zu lesen. Mein Hauptanliegen sind: Portabilität (Longs sind unterschiedliche Größen auf verschiedenen Plattformen), wenn Sie aus Binärdateien mit std :: ifstream lesen, kehrt es die Byte-Reihenfolge (auf die Endlichkeit meiner Maschine).Lange Lesevorgänge von der Datei umkehren?
Ich verstehe für Datentypen wie unsigned int, können Sie einfach bitweise Operatoren und verschieben und UND jedes Byte, um die Byte-Reihenfolge nach dem Lesen aus einer Datei umzukehren.
Ich bin nur nicht sicher, was ich dafür tun würde: Zeit meinen Code ad absurdum Wert geben:
long value;
in.seekg(0x3c);
in.read(reinterpret_cast<char*>(&value), sizeof(long));
Ich bin nicht sicher, wie ich Portabilität erreichen kann (ich lese etwas über Gewerkschaften und Char *) und auch umgekehrt unterzeichnet lange es liest.
Danke.
Sie würden es nur umkehren, wenn es nicht die Endian auf Ihrem System entspricht. Sie sollten Datentypen mit bestimmten Größen verwenden, die in '' definiert sind. Lesen Sie in eine Zeichenfolge und konstruieren Sie den Wert dann mithilfe von Bitverschiebungen und Maskierung. Dann wird Ihr Code unabhängig von der Endianz auf Ihrem System sein. –
paddy