//結構體轉字節數組 public byte[] StructToBytes (object structObj) { int size = Marshal.SizeOf (structObj);//獲取結構體的大小 IntPtr buffer = Marshal.AllocHGlobal (size);//分配內存 try { Marshal.StructureToPtr (structObj, buffer, false);//將數據從託管對象封裝到非託管內容並不銷燬舊物體 byte[] bytes = new byte[size]; Marshal.Copy (buffer, bytes, 0, size);//將數據從非託管內存複製到數組內 return bytes; } finally { Marshal.FreeHGlobal (buffer);//釋放內存 } }
//字節轉結構體 public object BytesToStruct (byte[] bytes, Type strcutType) { int size = Marshal.SizeOf (strcutType); IntPtr buffer = Marshal.AllocHGlobal (size); try { Marshal.Copy (bytes, 0, buffer, size); return Marshal.PtrToStructure (buffer, strcutType); } finally { Marshal.FreeHGlobal (buffer); } }