MarshalHelper
2024-05-14 00:16:24
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 }
转载于:https://www.cnblogs.com/lizhi0755/p/3164807.html
MarshalHelper相关推荐
最新文章
- opencv仿射变换
- Java学习总结:6
- ECSHOP在商品详细页面上获取该商品的顶级分类id和名称
- xmlstreamexception 参数实体未进行声明_命名实体识别研究进展概述
- linux nexus启动_Linux一键部署Nexus 3私服仓库自动化部署脚本
- IT基础架构规划方案二(计算机系统与机房规划规划)
- Sql Server 2008完全卸载方法(其他版本类似)
- 离散数学及其应用第六版中文电子书和答案
- 《自己动手写操作系统》之 10分钟完成最小的操作系统
- 计算机毕业设计之java+javaweb的房屋出租系统
- SIM868 GPS模块指令中文解释
- 年度Sweb绩效考评表
- 自然语言处理NLPIR-ICTCLAS 授权文件过期问题
- python的print输出格式举例_python中print输出格式是什么
- 【choco 安装】chocolatey 安装步骤包管理工具
- pythonrequests请求https错误_如何解决python之requests安全证书(HTTPS请求)问题?
- 哪款蓝牙耳机戴着舒服?佩戴舒适度高的四款蓝牙耳机推荐
- linux创建任务栏图标
- adobe的AGAL语言
- python ipaddress模块简介
热门文章
- 继承,is,as,多态
- linux中常用的头文件
- Delphi中禁止WebBrowser右键的方法
- linux gcc 7.3.0安装,升级gcc到7.3.0
- spss方差分析_【案例】SPSS统计分析:多因素方差分析
- python如何读二进制文件_python怎么读二进制文件
- C++ set的一些用法
- 查看linux服务器的系统信息
- c语言float二进制输出代码_下面C语言中这十四大谜题,不看答案你能做出来吗?...
- [MySQL]经常无故崩溃amd.dll , boot1.exe病毒