结构体转byte数组

1  首先要明白 ,是 在那个命名空间下  System.Runtime.InteropServices;

2  首先得到结构体的大小

2  开辟相应的内存空间

3  将结构体填充进开辟的内存空间

4  从内存空间拷贝进byte数组

5  不要忘记释放内存哦

  public static byte[] StructToBytes(object structObj, int size = )
{
if (size == )
{
size = Marshal.SizeOf(structObj); //得到结构体大小
}
IntPtr buffer = Marshal.AllocHGlobal(size); //开辟内存空间
try
{
Marshal.StructureToPtr(structObj, buffer, false); //填充内存空间
byte[] bytes = new byte[size];
Marshal.Copy(buffer, bytes, , size); //填充数组
return bytes;
}
catch (Exception ex)
{
Debug.LogError("struct to bytes error:" + ex);
return null;
}
finally
{
Marshal.FreeHGlobal(buffer); //释放内存
}
}

同理,接受到的byte数组,转换为结构体

1  开辟内存空间

2  用数组填充内存空间

3  将内存空间的内容转换为结构体

4 同样不要忘记释放内存

 public static object BytesToStruct(byte[] bytes, Type strcutType, int nSize)
{
if (bytes == null)
{
Debug.LogError("null bytes!!!!!!!!!!!!!");
}
int size = Marshal.SizeOf(strcutType);
IntPtr buffer = Marshal.AllocHGlobal(nSize);
//Debug.LogError("Type: " + strcutType.ToString() + "---TypeSize:" + size + "----packetSize:" + nSize);
try
{
Marshal.Copy(bytes, , buffer, nSize);
return Marshal.PtrToStructure(buffer, strcutType);
}
catch (Exception ex)
{
Debug.LogError("Type: " + strcutType.ToString() + "---TypeSize:" + size + "----packetSize:" + nSize);
return null;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}

最新文章

  1. Python系统命令操作
  2. HTTPS 客户端验证 服务端证书流程
  3. 【原/转】UITableview性能优化总结
  4. jquery如何自定义插件(扩展实例/静态方法)
  5. Vs2010发布Asp.Net网站及挂到IIS服务上
  6. php基础之二 函数
  7. C# 连接 数据库的时候 出现 程序出现异常"尝试读取或写入受保护的内存这通常指示其他内存已损坏" 错误
  8. jQuery简单实现图片预加载
  9. MySQL使用pt-online-change-schema工具在线修改1.6亿级数据表结构
  10. codeblocks无法编译的问题
  11. [译]ASP.NET Core 2.0 视图引擎
  12. POJ 3304 Segments[直线与线段相交]
  13. (linux虚拟机)克隆得到的虚拟机修改网卡信息和IP地址,以及DNS
  14. ios 不支持-,-时间。
  15. 深入解析HashMap、HashTable
  16. C#图片文字识别
  17. VS2015使用小技巧
  18. 13.从url 输入网址到最终页面渲染完成
  19. PHP 表单和用户输入
  20. 1.CentOS6.5下的基础DNS配置

热门文章

  1. maven POM —— maven权威指南学习笔记(五)
  2. php和jsCOOKIE实现前端交互
  3. Preparing Olympiad---cf550B(DFS或者状态压缩模板)
  4. NSUserDefaults保存对象数组报错
  5. HMM,MEMM,CRF模型的比较
  6. mysql在线手册汇总
  7. 我与前端之间不得不说的三天两夜之jQuery
  8. Delphi FastReport动态加载图片 (转载)
  9. Java分布式:消息队列(Message Queue)
  10. nginx日志输出,https,ssl