C 結構體中陣列的分配

2021-06-21 02:03:11 字數 1056 閱讀 4875



在寫c#tcp通訊程式時,傳送資料時,只能傳送byte陣列,處理起來比較麻煩不說,如果是和vc6.0等寫的程式通訊的話,很多的都是傳送結構體,在vc6.0中可以很方便的把乙個char陣列轉換為乙個結構體,而在c#卻不能直接把byte陣列轉換為結構體,要在c#中傳送結構體,可以按以下方法實現:

(1)定義結構體:

//命名空間

using system.runtime.interopservices;

//注意這個屬性不能少

[structlayoutattribute(layoutkind.sequential,charset=charset.ansi,pack=1)]

struct teststruct

...(2)結構體轉byte陣列:

/**

/// 結構體轉byte陣列

///

/// 要轉換的結構體

/// 轉換後的byte陣列

public static byte structtobytes(object structobj)

...(3)byte陣列轉結構體:

/**

/// byte陣列轉結構體

///

/// byte陣列

/// 結構體型別

/// 轉換後的結構體

public static object bytestostuct(byte bytes,type type)

...//分配結構體大小的記憶體空間

intptr structptr = marshal.allochglobal(size);

//將byte陣列拷到分配好的記憶體空間

marshal.copy(bytes,0,structptr,size);

//將記憶體空間轉換為目標結構體

object obj = marshal.ptrtostructure(structptr, type);

//釋放記憶體空間

marshal.freehglobal(structptr);

//返回結構體

return obj;

}

C中結構體的儲存分配

對於c語言中結構體所佔的儲存空間的大小,也一直是筆試面試的常客,今天好好看了一下這方面,以前一直以為很清楚了,今天通過各種實際測試舉例,發現原來還是沒有搞透徹,好在現在是徹底懂了,所以和大家分享,希望能有所幫助。提到結構體,相信大家都知道 元素儲存要對齊 話是沒有錯,只是這個 對齊 裡面包含了很多微...

C中結構體的儲存分配

對於c語言中結構體所佔的儲存空間的大小,也一直是筆試面試的常客,今天好好看了一下這方面,以前一直以為很清楚了,今天通過各種實際測試舉例,發現原來還是沒有搞透徹,好在現在是徹底懂了,所以和大家分享,希望能有所幫助。提到結構體,相信大家都知道元素儲存要對齊,話是沒有錯,只是這個 對齊 裡面包含了很多微妙...

c結構體中的 柔性陣列

出處 開發c 時,經常見到如下型別的結構體定義 1 2 3 4 5 typedefstructlist tlist t 最後一行char data 0 的作用是?方便管理記憶體緩衝區 減少記憶體碎片化 申明乙個長度為0的陣列,就可以使得這個結構體是可變長的。對於編譯器來說,此時長度為0的陣列並不占用...