zoukankan      html  css  js  c++  java
  • MarshalHelper

     1 public class MarshalHelper
     2     {
     3         /// <summary>
     4         /// 结构体转byte数组
     5         /// </summary>
     6         /// <param name=”structObj”>要转换的结构体</param>
     7         /// <returns>转换后的byte数组</returns>
     8         public static byte[] StructToBytes(object structObj)
     9         {
    10             //得到结构体的大小
    11             int size = Marshal.SizeOf(structObj);
    12             //创建byte数组
    13             byte[] bytes = new byte[size];
    14             //分配结构体大小的内存空间
    15             IntPtr structPtr = Marshal.AllocHGlobal(size);
    16             //将结构体拷到分配好的内存空间
    17             Marshal.StructureToPtr(structObj, structPtr, false);
    18             //从内存空间拷到byte数组
    19             Marshal.Copy(structPtr, bytes, 0, size);
    20             //释放内存空间
    21             Marshal.FreeHGlobal(structPtr);
    22             //返回byte数组
    23             return bytes;
    24         }
    25 
    26         /// <summary>
    27         /// byte数组转结构体
    28         /// </summary>
    29         /// <param name=”bytes”>byte数组</param>
    30         /// <param name=”offset”>结构体在数组的开始位置</param>
    31         /// <param name=”type”>结构体类型</param>
    32         /// <returns>转换后的结构体</returns>
    33         public static object BytesToStuct(byte[] bytes, int offset, Type type)
    34         {
    35              //得到结构体的大小
    36              int size = Marshal.SizeOf(type);
    37              //byte数组长度小于结构体的大小
    38              if (size > bytes.Length)
    39              {
    40                 //返回空
    41                 return null;
    42              }
    43              //分配结构体大小的内存空间
    44              IntPtr structPtr = Marshal.AllocHGlobal(size);
    45              //将byte数组拷到分配好的内存空间
    46              Marshal.Copy(bytes, offset, structPtr, size);
    47              //将内存空间转换为目标结构体
    48              object obj = Marshal.PtrToStructure(structPtr, type);
    49              //释放内存空间
    50              Marshal.FreeHGlobal(structPtr);
    51              //返回结构体
    52              return obj;
    53         }
    54     }
  • 相关阅读:
    Mayan游戏 (codevs 1136)题解
    虫食算 (codevs 1064)题解
    靶形数独 (codevs 1174)题解
    黑白棋游戏 (codevs 2743)题解
    神经网络 (codevs 1088) 题解
    The Rotation Game (POJ 2286) 题解
    倒水问题 (codevs 1226) 题解
    银河英雄传说 (codevs 1540) 题解
    生日蛋糕 (codevs 1710) 题解
    第一章 1.11 高阶函数
  • 原文地址:https://www.cnblogs.com/lizhi0755/p/3164807.html
Copyright © 2011-2022 走看看