您好,登錄后才能下訂單哦!
這篇文章主要講解了“C#結構體數組間怎么轉化”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#結構體數組間怎么轉化”吧!
C#結構體數組間的轉化問題:在寫C#TCP通信程序時,發送數據時,只能發送byte數組,處理起來比較麻煩,可以按以下方法實現:
(1)C#結構體數組轉化之定義結構體:
//命名空間 using System.Runtime.InteropServices; //注意這個屬性不能少 [StructLayoutAttribute( LayoutKind.Sequential, CharSet=CharSet.Ansi,Pack=1)] struct TestStruct ...{ public int c; //字符串,SizeConst為字符串的***長度 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string str; //int數組,SizeConst表示數組的個數,在轉換成 //byte數組前必須先初始化數組,再使用,初始化 //的數組長度必須和SizeConst一致,例test = new int[6]; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public int[] test; }
(2)C#結構體數組轉化之結構體轉byte數組:
/**//// <summary> /// 結構體轉byte數組 /// </summary> /// <param name="structObj">要轉換的結構體</param> /// <returns>轉換后的byte數組</returns> public static byte[] StructToBytes(object structObj) ...{ //得到結構體的大小 int size = Marshal.SizeOf(structObj); //創建byte數組 byte[] bytes = new byte[size]; //分配結構體大小的內存空間 IntPtr structPtr = Marshal.AllocHGlobal(size); //將結構體拷到分配好的內存空間 Marshal.StructureToPtr(structObj, structPtr, false); //從內存空間拷到byte數組 Marshal.Copy(structPtr, bytes, 0, size); //釋放內存空間 Marshal.FreeHGlobal(structPtr); //返回byte數組 return bytes; }
C#結構體數組轉化的問題就向你介紹到這里,希望對你學習和了解C#結構體數組轉化有所幫助。
感謝各位的閱讀,以上就是“C#結構體數組間怎么轉化”的內容了,經過本文的學習后,相信大家對C#結構體數組間怎么轉化這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。