谁能告诉我怎么做我下面的结构转换为C#转换C++结构到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
谁能告诉我怎么做我下面的结构转换为C#转换C++结构到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
C# does not have unions.。最接近的是使用FieldOffset。但是,如果你的结构没有被直接传递给外部函数,那么最好使用更多的OO方法。我建议只是用两种类型的数组创建一个结构,并将你不使用的那个设置为null。
这是不准确的,[LayoutKind]在常规的C#代码中工作得很好。 –
我不会说它的工作“很好”,但它确实有效。 – Rook
您将需要查找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固定我一时失去理智;因为你想产生一个联合,你需要所有的字段在内存中重叠。这是在C#中通过告诉编译器将它们放置在相同的偏移处,在这种情况下为0来实现的。
其实它是0,因为我们想要一个* union *。 –
那么,您可以告诉我们'DES_cblock'是什么类型。我假设'DES_LONG'是一个简单的整数类型,但如果你能告诉我们这是什么也会有所帮助。 – Rook
糟糕.sorry typedef无符号字符DES_cblock [8]是DES_cblock和DES_LONG无符号长 – user1177586