C# 中結構體到位元組數組的轉換
網路資料傳輸需要將結構體轉換為位元組數組。以下解答說明如何將名為 CIFSPacket 的特定結構體在 C# 中轉換為位元組數組:
問題:
如何將 CIFSPacket 結構體轉換為位元組數組,以便透過套接字進行網路傳輸?
解答:
使用 Marshaling 是進行此轉換的有效方法。
實作:
包含頭檔: 在程式開頭加上 using System.Runtime.InteropServices;
。
getBytes 函數: 定義一個函數,用於將 CIFSPacket 結構體轉換為位元組數組:
<code class="language-csharp"> byte[] getBytes(CIFSPacket str) { int size = Marshal.SizeOf(str); byte[] arr = new byte[size]; IntPtr ptr = IntPtr.Zero; try { ptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(str, ptr, true); Marshal.Copy(ptr, arr, 0, size); } finally { Marshal.FreeHGlobal(ptr); } return arr; }</code>
fromBytes 函數: 定義一個函數,用於將位元組陣列轉換回 CIFSPacket 結構體:
<code class="language-csharp"> CIFSPacket fromBytes(byte[] arr) { CIFSPacket str = new CIFSPacket(); int size = Marshal.SizeOf(str); IntPtr ptr = IntPtr.Zero; try { ptr = Marshal.AllocHGlobal(size); Marshal.Copy(arr, 0, ptr, size); str = (CIFSPacket)Marshal.PtrToStructure(ptr, str.GetType()); } finally { Marshal.FreeHGlobal(ptr); } return str; }</code>
其他注意事項:
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
來表示最大大小為 100 的字串。 範例用法:
傳送函數:
<code class="language-csharp">byte[] byteArr = getBytes(packet); MyPing.SendTo(byteArr);</code>
接收函數:
<code class="language-csharp">byte[] receivedArr = null; // 接收数据包 CIFSPacket receivedPacket = fromBytes(receivedArr);</code>
以上是如何將C#結構體(CIFSPacket)轉換為位元組數組進行網路傳輸?的詳細內容。更多資訊請關注PHP中文網其他相關文章!