C# byte[]、struct、intptr等的相互转换
1.struct byte[]互相转换
//struct转换为byte[] public static 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); } } //byte[]转换为struct public static object BytesToStruct(byte[] bytes, Type type) { int size = Marshal.SizeOf(type); IntPtr buffer = Marshal.AllocHGlobal(size); try { Marshal.Copy(bytes, 0, buffer, size); return Marshal.PtrToStructure(buffer, type); } finally { Marshal.FreeHGlobal(buffer); } }
2.Intptr、byte[]互相转换
//IntPtr转byte[]
IntPtr y;//初始化 略 byte[] ys = new byte[yLength]; Marshal.Copy(y, ys, 0, yLength);
//byte[]转换为Intptr public static Intptr BytesToIntptr(byte[] bytes) { int size = bytes.Length; IntPtr buffer = Marshal.AllocHGlobal(size); try { Marshal.Copy(bytes, 0, buffer, size); return buffer; } finally { Marshal.FreeHGlobal(buffer); } }
至于struct和Intptr转换,完全可以参考上面的函数