[英]Converting c++ struct to c# struct
誰能告訴我如何將以下結構轉換為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
您將需要查找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)進行布局來實現的。
C#沒有聯合。 。 最接近的是使用FieldOffset。 但是,如果未將結構直接傳遞給外部函數,則最好使用更多面向對象的方法。 我建議只用兩種類型的數組創建一個結構,然后將不使用的結構設置為null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.