C 結構體和位元組陣列的轉換

2021-05-02 12:11:58 字數 1042 閱讀 7341

c#結構體和位元組陣列的轉換

在寫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 中,套接字傳送和接收的型別為字元陣列char,而char與結構體struct可以直接進行顯式轉換就可以 在c 中,sockets類和networkstream類傳送和接收的型別為位元組陣列byte,而它與結構體的轉換並...

C 結構體和位元組陣列的轉換

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

C 結構體和位元組陣列的轉換

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