将c ++结构转换为c#struct

时间:2012-06-24 14:40:28

标签: c# c++ struct

有人能告诉我如何将以下结构转换为c#

typedef struct DES_ks
{
    union
    {
        DES_cblock cblock;
        /* make sure things are correct size on machines with
         * 8 byte longs */
        DES_LONG deslong[2];
    } ks[16];
} DES_key_schedule

2 个答案:

答案 0 :(得分:5)

您需要查找DES_cblock和DES_LONG的typedef来翻译它。但是,为了帮助您入门,您需要阅读StructLayoutAttribute。将C联合转换为C#的方法是使用显式布局结构:

[StructLayout(LayoutKind.Explicit)]
public struct DES_ks
{
  [FieldOffset(0)]
  public DES_cblock cblock;
  [FieldOffset(0)]
  [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
  public DES_LONG[] deslong;
}

感谢@Konrad修复我的临时精神错乱;因为你想要产生一个联合,你需要所有的字段在内存中重叠。这是通过告诉编译器将它们放在相同的偏移量(在本例中为0)来实现的。

答案 1 :(得分:0)

C# does not have unions.。你最接近的是使用FieldOffset。但是,如果您的结构没有直接传递给外部函数,那么最好使用更多OO方法。我建议只使用两种类型的数组创建一个结构,并将你不使用的那个设置为null。