日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MarshalHelper

發布時間:2023/12/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。