有人能告诉我如何将以下结构转换为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
答案 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。