.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?


Anmelden zum Antworten