sizeof mit struct
-
Warum gibt mir das hier 32 aus??? Es müsste doch eigtl. 30 sein!
struct STest { DWORD dwSignature; WORD wVersionNeeded; WORD wGeneralPurpose; WORD wCompressionMethod; WORD wLastModTime; WORD wLastModDate; DWORD dwCRC32; DWORD dwCompressedSize; DWORD dwUncompressedSize; WORD wFilenameLength; WORD wExtraLength; }; int main() { cout << (int)sizeof(STest) << endl; return 0; }
-
Schaust du hier: http://en.wikipedia.org/wiki/Data_structure_alignment
-
Bei mir gibt es 32 aus, mit folgenden Typedefs:
typedef short WORD; typedef int DWORD;Ist hier wohl nicht das Problem, aber erkundige dich mal über Alignment.
-
Ich verstehe.
Nach dem wLastModDate wird also noch ein WORD eingefügt, wegen Data structure alignment. (Ich habe nachgeschaut: Es ist tatsächlich so...)
Das Problem ist, dass diese Struktur genau so sein muss, wie sie dasteht, da sie so in Dateien als Header vorliegt.
Wie könnte ich das Problem umgehen?
-
Unter VC++ kann man mit
#pragma pack(1)Das Alignment auf 1 byte stellen. Damit funktioniert es!