WORD Länge in struct
-
Hallo
Habe folgendes Problem. Ich habe eine 'struct'struct { DWORD magic; // 0 4 WORD version; // 4 2 WORD unkown; // 6 2 WORD BitFlag; // 8 2 <- hier sind es 32 bit statt 16 DWORD xxxxx; // 10 4 }TEST;--------------
mit
ShowMessage(sizeof(TEST));sehe ich 16.
sobald die Anzahl von den hintereinander erstellten 'WORD's ungerade ist, werden trotz WORD 32 bit gelesen oder geschrieben.NFile->Write(&TEST, sizeof(TEST));kann man das umgehen ? oder warum ist das so bzw. wie sollte man es machen ?
Danke
-
Das ist eine Compileroptimierung, siehe "Datenausrichtung" unter "erweiterte Compileroptionen".
Der Compiler ordnet die Elemente des structs so an, dass der Prozessor sie schnell laden kann.
Probier mal:
#pragma pack(push, 1) struct { DWORD magic; WORD version; WORD unkown; WORD BitFlag; DWORD xxxxx; }TEST; #pragma pack(pop)und lies dir die Hilfe zu #pragma pack durch.
-
Hallo
Bist denn auf genau diese Bitstruktur angewiesen? Denn der Compiler kann bei sowas normalerweise besser einschätzen was optimierter ist. Denn um 14 Bytes zu verarbeiten braucht der Prozessor so oder so 16 Byte (4 x 32 Bit). Durch deine manuelle Zusammensetzung gewinnst du meistens nichts.
bis bald
akari
-
danke,
ja ich bin darauf angewiesen, da ich sonst alles einzeln einlesen müßte.
ich hatte es erst mal so gelößt, daß ich struct teilte und einmal die Zeigerposion um 2 zurücksetzte. Meistens sind Dateien so aufgebaut daß es "rund" läuft und da bietet sich struct sehr gut an.