2

boolとして1文字を持つ構造体を適切にロードしようとしています。正常に動作するように見えますが、bool でデータを printf すると、1 ではなく 4 バイトを読み取るため失敗します。

typedef struct
{
    char magic[8];
    u32 version;
    bool updatable;
    u64 filetime;
    u32 region;
    u32 numentries;
    u32 fs1;
    u32 fs2;
    u8 *zonedata;
} fastfile;

int main(int argc, char **args)
{
    if(!args[1])
        return -1;
    u64 file_size;
    get_file_size(args[1], &file_size);
    u8* file_data = new u8[file_size];
    read_file(args[1], file_data, file_size); //ignore this just reading data

    fastfile* ff = (fastfile *)(file_data + 0); //this is where I setup my struct according to file data
}

私の構造があります。デバッグすると次のようになります。

http://puu.sh/3e091/1ab766dfc6.png

16 進表示:

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00E7C910  49 57 66 66 75 31 30 30 00 00 01 0D 01 01 CA CC  IWffu100......ÊÌ
00E7C920  3F 53 50 A3 40 00 00 00 02 00 00 00 00 00 03 5B  ?SP£@..........[
00E7C930  78 DA EC 5D 09 7C 13 C5 FE DF A6 94 9B 02 0A 72  xÚì].|.Åþߦ”›..r

ご覧のとおり、filetime へのポインターは 0xE7C91D ではなく 0xE7C920 にあります。

どうすれば私が望むように動作させることができるのでしょうか? または、ポインターが 4 バイト長であるため、そのように機能しませんか?

4

1 に答える 1