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

标签 c# c++ unions

见下面的结构

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/

相关文章:

c++ - 为什么要打印反向字符串?

c# - VSTO : how to set a ribbon's button from ThisAddIn class

c++ - OpenCV 错误 : Assertion failed (vc_. isOpened()) 复位

c++ - 找不到体系结构 x86_64 mac os 10.13.3 的符号

C++ 包含在循环中

c++ - Actor 和 union 一样安全吗?

c# - 如何终止在 C# 中的 foreach 循环中启动的线程

c# - MVC Entity Framework 连接字符串不起作用

c# - 我无法在 C# 中将 list<object[]> 转换为 list <T[]>

mysql - 将一个表中的两列连接到另一表中的一列,为两列中的每一列返回不同或相同的结果