惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
腾讯CDC
博客园 - Franky
S
SegmentFault 最新的问题
美团技术团队
阮一峰的网络日志
阮一峰的网络日志
J
Java Code Geeks
Y
Y Combinator Blog
Engineering at Meta
Engineering at Meta
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
I
InfoQ
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
B
Blog RSS Feed
博客园 - 叶小钗
博客园_首页
有赞技术团队
有赞技术团队
雷峰网
雷峰网
量子位
小众软件
小众软件
月光博客
月光博客
U
Unit 42
D
DataBreaches.Net

博客园 - 三胖他爹

VC CUtilityLZW 效率还行的LZW压缩算法,随机数加密 VC CQHashNTBuffer 牛逼的Hash表 UINT32 VC CHashBuffer 牛逼的hash表算法,字符串查找块了100倍 关闭Fedora防火墙 gnome 屏幕截图 zynq -- arm-xilinx-eabi-路径 Fedora 14安装出现的错误 fedora19安装后,需要安装的一些必备的软件包 zynq -- cannot find -lxil Zynq -- 启动过程 OTG: On-The-Go Zynq --- SDK - Cannot compile ARM application on Windows 7 64-bit or Linux 64-bit OS iec61850采样协议(9-1、9-2)解析(二) 找不到/dev/input/event的原因 iec61850采样协议(9-1、9-2)解析(一) C语言项目常用的头文件声明及相关宏定义 TTY头文件注释 设置和取得串口参数 程序调用shell设置ip地址
MarshalHelper
三胖他爹 · 2013-07-01 · via 博客园 - 三胖他爹
 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     }