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

Converting c++ struct to c# struct

本文关键字:结构 转换 c++      更新时间:2023-10-16

谁能告诉我如何将以下结构转换为 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

您需要查找 typedef 以获取DES_cblock和DES_LONG来翻译它。但是,要入门,您需要阅读 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修復了我暫時的瘋狂;因為你想產生一個聯合,你需要所有的場在記憶體中重疊。这是在 C# 中通过告诉编译器将它们布置在相同的偏移量(在本例中为 0)来实现的。

C# 没有联合。您可以获得的最接近的是使用FieldOffset。但是,如果您的结构没有直接传递给外部函数,则最好使用更 OO 的方法。我建议只创建一个包含两种类型数组的结构,并将您不使用的结构设置为 null。