在寫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的陣列並不占用...