C++: struct MonsterData { BYTE _1[22]; //0x00 struct { BYTE fUnk:1; BYTE fNormal:1; BYTE fChamp:1; BYTE fBoss:1; BYTE fMinion:1; }; //0x16 WORD _2; //0x17 DWORD _3; //0x18 BYTE anEnchants[9]; //0x1C BYTE _4; //0x25 WORD wUniqueNo; //0x26 DWORD _5; //0x28 struct { wchar_t wName[28]; }; //0x2C }; C#: [StructLayout(LayoutKind.Explicit)] public struct MonsterData { [FieldOffset(0x00)] [MarshalAs(UnmanagedType.ByValArray, SizeConst=22)] public byte[] _1; // Union [FieldOffset(0x16)] public byte fUnk; [FieldOffset(0x16)] public byte fNormal; [FieldOffset(0x16)] public byte fChamp; [FieldOffset(0x16)] public byte fBoss; [FieldOffset(0x16)] public byte fMinion; [FieldOffset(0x17)] public UInt16 _2; [FieldOffset(0x18)] public uint _3; [FieldOffset(0x1C)] [MarshalAs(UnmanagedType.ByValArray, SizeConst=9)] public byte[] anEnchants; [FieldOffset(0x25)] public byte _4; [FieldOffset(0x26)] public UInt16 wUniqueNo; [FieldOffset(0x28)] public byte _5; [FieldOffset(0x2C)] [MarshalAs(UnmanagedType.LPStr, SizeConst=28)] public string wName; }