[StructLayout(LayoutKind.Sequential)]
public struct NameStruct
{
public uint unk1;//0位置
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public uint[] unk2;
public ulong unk3;//0x18
public byte b;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x37)]
public byte[] name;//0x21
}在这个结构体中,name是一个字符串,在结构体开始位+0x21的位置,以UTF8编码,总长不超过0x37bytes
Encoding.UTF8.GetString(nameStruct.name)现在我通过这样访问结构体的中name,觉得很麻烦,
怎么样定义后通nameStruct.name就能得到字符串
public string Name
{
get { return Encoding.UTF8.GetString(this.name); }
}也可以将name字段改为string定义,并修改MarshalAs特性的参数为UnmanagedType.ByValTStr
如果是字节的话
可以用fieldoffset 属性定义
public struct NameCache
{
public uint unk1;//0位置
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public uint[] unk2;
public ulong unk3;//0x18
public byte b;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x37)]
public byte[] name;//0x21
public string Name
{
get { return Encoding.UTF8.GetString(this.name).Trim('\0'); }
}
}