见下面的结构
struct STRUCT_ITEM
{
short Index;
union
{
short Value;
struct
{
unsigned char Type;
unsigned char Values;
};
} Effect[3];
};
你好..晚上好。我想是否可以将 C ++ 中的结构转换为 C#?
我希望新结构包含3个对象的数组,正如您在 C ++ 中的代码中所看到的。
就像这样使用:
var Item = new Item ();
Item.Effect [2] .Type = 2;
我只是这样:
[FieldOffset(0)]
public short Index;
[FieldOffset(2)]
public short MountHP;
[FieldOffset(2)]
public byte EF1;
[FieldOffset(3)]
public byte EFV1;
[FieldOffset(4)]
public byte EF2;
[FieldOffset(5)]
public byte EFV2;
[FieldOffset(6)]
public byte EF3;
[FieldOffset(7)]
public byte EFV3;
是否可以在结构中包含数组?此结构包含最大8个字节的大小。
谁能提供帮助,我很感激!非常感谢你
答案 0 :(得分:1)
试试这个。 是的,该数组可以在Sturcture中使用。
[StructLayout(LayoutKind.Explicit)]
public struct STRUCT_SUB_ITEM
{
[FieldOffset(0)]
public short Value;
[FieldOffset(0)]
public byte Type;
[FieldOffset(1)]
public byte Values;
}
[StructLayout(LayoutKind.Sequential)]
public struct STRUCT_ITEM
{
short index;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public STRUCT_SUB_ITEM[] Effect;
}
并像这样进行测试。
static void test3()
{
STRUCT_ITEM item = new STRUCT_ITEM();
item.Effect = new STRUCT_SUB_ITEM[3];
item.Effect[0].Type = 1;
item.Effect[0].Values = 2;
item.Effect[1].Type = 1;
item.Effect[1].Values = 2;
item.Effect[2].Type = 1;
item.Effect[2].Values = 2;
Console.WriteLine(item.Effect[2].Value);
}
带有限制类型的数组(bool,int,double,...)使用Fixed关键字,它不需要分配内存。
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi)]
public unsafe struct STRUCT_ITEM2
{
[FieldOffset(0)]
public fixed byte item_01[260];
}