任何人都可以告诉我如何将以下结构转换为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
Run Code Online (Sandbox Code Playgroud)
您需要查找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;
}
Run Code Online (Sandbox Code Playgroud)
感谢@Konrad修复我的临时精神错乱; 因为你想要产生一个联合,你需要所有的字段在内存中重叠.这是通过告诉编译器将它们放在相同的偏移量(在本例中为0)来实现的.