转换c++;结构到c#结构

转换c++;结构到c#结构,c#,c++,struct,C#,C++,Struct,谁能告诉我如何将下面的结构转换成c# 。最接近的方法是使用FieldOffset。然而,如果您的结构没有直接传递给外部函数,那么您最好使用更面向对象的方法。我建议只使用这两种类型的数组创建一个结构,并将不使用的数组设置为null。。最接近的方法是使用FieldOffset。然而,如果您的结构没有直接传递给外部函数,那么您最好使用更面向对象的方法。我建议只使用这两种类型的数组创建一个结构,并将不使用的数组设置为null。您需要查找typedef中的DES_cblock和DES_LONG来翻译它。然

谁能告诉我如何将下面的结构转换成c#


。最接近的方法是使用FieldOffset。然而,如果您的结构没有直接传递给外部函数,那么您最好使用更面向对象的方法。我建议只使用这两种类型的数组创建一个结构,并将不使用的数组设置为null。

。最接近的方法是使用FieldOffset。然而,如果您的结构没有直接传递给外部函数,那么您最好使用更面向对象的方法。我建议只使用这两种类型的数组创建一个结构,并将不使用的数组设置为null。

您需要查找typedef中的DES_cblock和DES_LONG来翻译它。然而,为了让你开始,你需要仔细阅读。将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。

您需要查找类型定义中的DES_cblock和DES_LONG来翻译它。然而,为了让你开始,你需要仔细阅读。将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。

好的,您可以告诉我们DES#u cblock是什么类型。我假设DES_LONG是一个简单的整型,但是如果你能告诉我们这也是什么,那将是很有帮助的。哦,对不起,typedef unsigned char DES_cblock[8]是DES_cblock,DES_LONG是unsigned LONG。你可以告诉我们DES_cblock是什么类型。我假设DES_LONG是一个简单的整数类型,但是如果你能告诉我们它是什么,那将是很有帮助的。哦,对不起,typedef unsigned char DES_cblock[8]是DES_cblock,DES_LONG是unsigned LONG这不准确,[LayoutKind]在常规C#代码中也能正常工作。我不会说它工作得“很好”,但它确实有效。这并不准确,[LayoutKind]在常规C#代码中也能正常工作。我甚至不会说它“很好”,但它确实有效。