MarshalHelper
生活随笔
收集整理的這篇文章主要介紹了
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 }
?
轉載于:https://www.cnblogs.com/lizhi0755/p/3164807.html
總結
以上是生活随笔為你收集整理的MarshalHelper的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 试管取卵多少个比较好?
- 下一篇: 网站上flv,MP4等格式的视频文件播放