.w3g parsen
-
Hi!
Ich möchte .w3g files parsen. In einer Anleitung dazu hab ich zum Header dieser Dateien folgendes gefunden:
offset | size/type | Description -------+-----------+----------------------------------------------------------- 0x0000 | 28 chars | zero terminated string "Warcraft III recorded game\0x1A\0" 0x001c | 1 dword | fileoffset of first compressed data block (header size) | | 0x40 for WarCraft III with patch <= v1.06 | | 0x44 for WarCraft III patch >= 1.07 and TFT replays 0x0020 | 1 dword | overall size of compressed file 0x0024 | 1 dword | replay header version: | | 0x00 for WarCraft III with patch <= 1.06 | | 0x01 for WarCraft III patch >= 1.07 and TFT replays 0x0028 | 1 dword | overall size of decompressed data (excluding header) 0x002c | 1 dword | number of compressed data blocks in file 0x0030 | n bytes | SubHeader (see section 2.1 and 2.2)Darauf hin hab ich mir eine Struct gebaut
struct Header { // FILEHEADER char[28] headline; dword fileoffset; dword sizeoffile; dword repheaderversion; dword sizeofdata; dword numcompresseddatablocks; byte subheader; };So: Dword, word, byte....wie läuft das genau mit denen? statt dword kann ich glaub ich einfach int verwenden, und für byte ein char[8]?
Und später, wenn ich diese Struktur hab, und anfange zu lesen, spring ich auf begin. und dann gehe ich wie genau vor? einzelne chars rauspicken und reinschreiben?
mfg XaTrIxX
-
2. Kommt drauf an. Aber ein byte ist eher ein char als ein char[8] .
Weis' deinen Kompilator aber nch darauf hin, dass er die struct so in den Speicher laden soll, also #pragma pack(push,1) oder so.
1. Vermutlich
3. input.read((char*)header,sizeof(header));
-
also beim anlegen dieses structs wie oben beschrieben hab ich massig kompilierfehler - klar er kennt die typen nicht.
und wenn ich sowas mach:
input.read((char*)header,sizeof(header));
woher weiß er dann, was zu welchem teil der struktur gehört?