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

2022-02-10 10:04:14 字數 1238 閱讀 1546

在寫

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

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

本文主要起源於專案從c 轉到c 時碰到的問題,即套接字傳送資訊時的型別轉換。在c 中,套接字傳送和接收的型別為字元陣列char,而char與結構體struct可以直接進行顯式轉換就可以 在c 中,sockets類和networkstream類傳送和接收的型別為位元組陣列byte,而它與結構體的轉換並...

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

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