在寫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;
}
Qt中如何通過tcp傳送結構體
前一段時間移植在想qt如何通過tcp傳送結構體,網上有人說可以通過如下方式 tcpsocket write char objecta,sizeof objecta tcpsocket read char objecta,sizeof objecta 但是我沒有成功,read有資料快取問題,所以讀過來...
c c 通過socket傳送結構體
c c 通過socket傳送結構可以直接先將結構轉化到記憶體中,再通過send直接傳送。首先,我們建立乙個結構體。struct usrdata write cfg fd,para,sizeof hd4100 rec t hd4100 rec t是自定義的結構 close cfg fd printf ...
c c 通過socket傳送結構體
c c 通過socket傳送結構體 少游冰雪世界 c c 通過socket傳送結構可以直接先將結構轉化到記憶體中,再通過send直接傳送。首先,我們建立乙個結構體。struct usrdata write cfg fd,para,sizeof hd4100 rec t hd4100 rec t是自定...