在c#中的結構體不能定義指標,不能定義字元陣列,只能在裡面定義字元陣列的引用。
c++的訊息結構體如下:
//訊息格式 4+16+4+4= 28個位元組
struct cs_message;
c#定義的結構體如下:
[structlayout(layoutkind.sequential, pack = 1)]
public
struct
my_message }
在c++的標頭檔案定義中,使用了 #pragma pack 1 位元組按1對齊,所以c#的結構體也必須要加上對應的特性,layoutkind.sequential屬性讓結構體在匯出到非託管記憶體時按出現的順序依次布局,而對於c++的char陣列型別,c#中可以直接使用string來對應,當然了,也要加上封送的特性和長度限制。
在寫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個方法去實現互**
public
class
converter
finally }
public
object bytestostruct(byte bytes, type strcuttype)
finally }
}static
void main(string args)
結構體的size是28個位元組和c++的結構體一樣,同時可以將結構體和位元組陣列互轉,方便udp的傳送和接收。
C 中 結 構 體 與 字 節 流 互 相 轉 換
一 c 結構體 1 定義與c 對應的c 結構體 在c 中的結構體不能定義指標,不能定義字元陣列,只能在裡面定義字元陣列的引用。c 的訊息結構體如下 訊息格式 4 16 4 4 28個位元組 struct cs message c 定義的結構體如下 structlayout layoutkind.se...
C 中結構體與位元組流互相轉換
1 定義與c 對應的c 結構體 在c 中的結構體不能定義指標,不能定義字元陣列,只能在裡面定義字元陣列的引用。c 的訊息結構體如下 訊息格式 4 16 4 4 28個位元組 struct cs message u32 t cmd type char username 16 u32 t dstid u...
c 位元組流與結構體互轉
c 是型別不安全的,一般位元組流和結構體是可以互相強轉的,但前提是位元組流要像結構體一樣進行資料對齊,下面就來看看按資料大小依次排列的位元組流是如何轉化為結構體的 基礎依賴部分 include include include namespace sangame tdata8 typedef unio...