簡體   English   中英

將C ++結構轉換為C#結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM