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     }
  • 相关阅读:
    header
    panel----单个基础版
    vue-demo
    js不同类型变量比较
    reset.css
    关于各个浏览器的兼容问题
    git
    AMD与CMD区别
    喜欢前端的看过来哦
    js中数组去重的几种方法
  • 原文地址:https://www.cnblogs.com/lizhi0755/p/3164807.html
Copyright © 2011-2022 走看看