在C#中將結構體轉換為字節數組
在C#中,將結構體轉換為字節數組是網絡數據傳輸或二進制數據存儲的常用技巧。本指南將演示如何使用 Marshaling 完成此操作。
您提供的代碼定義了一個名為 CIFSPacket 的結構體,其中包含表示網絡數據包的各個字段。要將此結構體轉換為字節數組,請按照以下步驟操作:
<code class="language-csharp">using System.Runtime.InteropServices; // 将结构体转换为字节数组的函数 public static 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; } // 将字节数组转换为结构体的函数 public static 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>
請注意,對於 CIFSPacket 中的 Buffer 字符串字段,您可能需要指定 Marshaling 屬性才能使其與 Marshaling 正確配合使用。以下是一個示例:
<code class="language-csharp">[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)] public string Buffer;</code>
請記住,根據 Buffer 字符串的最大預期大小設置 SizeConst 值。
有了這些函數,您可以使用 GetBytes() 將 CIFSPacket 結構體輕鬆轉換為字節數組,並使用 FromBytes() 從字節數組轉換回來。這提供了一種方便的方法來以二進制格式操作和傳輸您的結構體。
以上是如何使用封元將C#結構轉換為字節數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!