C#Byte Array to struct

Hoo*_*och 7 .net c# memory bytearray data-structures

我想使用ReadProcessMemory函数来填充这个结构.

    [StructLayout(LayoutKind.Explicit)]
public struct WinMineGameStruct
{
    [FieldOffset(0x118)]
    public Int32 xPressed;
    [FieldOffset(0x118)]
    public Int32 yPressed;
    [FieldOffset(0x140)]
    public Int32 MouseDown;
    [FieldOffset(0x160)]
    public Int32 GameStatus;
    [FieldOffset(0x164)]
    public Int32 IsInGame;
    [FieldOffset(0x194)]
    public Int32 MinesLeft;
    [FieldOffset(0x330)]
    public Int32 LevelMines;
    [FieldOffset(0x334)]
    public Int32 Colls;
    [FieldOffset(0x338)]
    public Int32 Rows;
    [FieldOffset(0x6a0)]
    public Int32 GameType;
    [FieldOffset(0x6cc)]
    public Int32 EasyBestScore;
    [FieldOffset(0x6d0)]
    public Int32 MediumBestScore;
    [FieldOffset(0x6d4)]
    public Int32 HardBestScore;
    [FieldOffset(0x6d8)]
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
    public Char[] PlayerEasyName;
    [FieldOffset(0x718)]
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
    public Char[] PlayerMediumName;
    [FieldOffset(0x758)]
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
    public Char[] PlayerHardName;
    [FieldOffset(0x798)]
    public Int32 NumLastHitDiscovered;
    [FieldOffset(0x79c)]
    public Int32 TimePlayed;
    [FieldOffset(0x7a4)]
    public Int32 DiscoveredFields;
}
Run Code Online (Sandbox Code Playgroud)

我知道如何读取字节数组,int,string,short等.我想知道如何将字节数组转换为此结构.

Joh*_*ski -1

哇...有趣的问题。

您可能会看看二进制格式化程序... http://msdn.microsoft.com/en-us/library/b85344hz.aspx

话虽如此,看起来您有一些与您的对象定义不完全匹配的二进制数组。在这种情况下,我认为您必须读取您感兴趣的数组的每个部分,并将该块反序列化为您想要的类型,即 int32 等...

请参阅此页面,了解如何执行从 byte[] 到 type 的各个字段。. 在此处输入链接描述

  • BinaryFormatter 可能不起作用,因为它用于序列化。您不能对未序列化的内容抛出 BinaryFormatter 并期望它起作用。 (3认同)