C 結構體和指標轉換

2021-06-21 00:48:00 字數 1081 閱讀 2966

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

1)定義結構體:

//命名空間

usingsystem.runtime.interopservices;

//注意這個屬性不能少 - 1位元組對齊

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

struct teststruct

2)結構體轉byte陣列:

///

///結構體轉byte陣列

///

///要轉換的結構體

///轉換後的byte陣列

publicstatic byte structtobytes(object structobj)

3)byte陣列轉結構體:

///

///byte陣列轉結構體

///

///byte陣列

///結構體型別

///轉換後的結構體

publicstatic object bytestostuct(byte bytes,type type)

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

intptrstructptr = marshal.allochglobal(size);

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

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

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

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

//釋放記憶體空間

marshal.freehglobal(structptr);

//返回結構體

return obj;

}

C 指標和結構體

1.基本概念 2.指標變數的定義與使用 3.指標所佔記憶體空間 include using namespace std int main int p a cout 8.指標 陣列 函式 1.基本概念 2.結構體的定義與使用 定義 使用 3.結構體陣列 include include using na...

C語言 結構體指標強制轉換

最近寫c程式遇到的結構體指標強轉的坑,記錄一下.是乙個簡單的選單程式,程式用到鍊錶,表中儲存了9個不同命令.每次將使用者輸入的命令與表中儲存的命令名作對比 遍歷查詢 然後執行相應功能.總體結構 linktable.h 定義通用模組化鍊錶資料結構,以及相關操作 linktable.c 實現標頭檔案中定...

結構體指標,C語言結構體指標詳解

結構體指標,可細分為指向結構體變數的指標和指向結構體陣列的指標。前面我們通過 結構體變數名.成員名 的方式引用結構體變數中的成員,除了這種方法之外還可以使用指標。前面講過,student1 表示結構體變數 student1 的首位址,即 student1 第乙個項的位址。如果定義乙個指標變數 p 指...