gpt4 book ai didi

c# - union 结构 C# - 等效或等于?

转载 作者:行者123 更新时间:2023-11-30 05:07:38 26 4
gpt4 key购买 nike

见下面的结构

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 个字节。

谁能帮帮我,感激不尽!非常感谢

最佳答案

试试这个。是的,该数组可以在结构中使用。

    [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];
}

关于c# - union 结构 C# - 等效或等于?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47320707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com