结构体转换byte数组

    xiaoxiao2021-11-30  17

    /// <summary> /// 单个结构体转换byte数组 /// </summary> /// <param name="structObj">结构体对象</param> /// <returns></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; } //多个结构体转换byte数组 public static byte[] StructToBytes2(object structObj1, object structObj2) { //得到结构体的大小 int size = Marshal.SizeOf(structObj1) + Marshal.SizeOf(structObj2); //创建byte数组 byte[] _bytes = new byte[size]; //分配结构体大小的内存空间 IntPtr structPtr1 = Marshal.AllocHGlobal(Marshal.SizeOf(structObj1)); IntPtr structPtr2 = Marshal.AllocHGlobal(Marshal.SizeOf(structObj2)); //将结构体拷到分配好的内存空间 Marshal.StructureToPtr(structObj1, structPtr1, false); Marshal.StructureToPtr(structObj2, structPtr2, false); //从内存空间拷到byte数组 Marshal.Copy(structPtr1, _bytes, 0, Marshal.SizeOf(structObj1)); Marshal.Copy(structPtr2, _bytes, Marshal.SizeOf(structObj1), Marshal.SizeOf(structObj2)); //释放内存空间 Marshal.FreeHGlobal(structPtr1); Marshal.FreeHGlobal(structPtr2); //返回byte数组 return _bytes; }
    转载请注明原文地址: https://ju.6miu.com/read-679002.html

    最新回复(0)