C# IntPtr转byte数组、byte[]转Intptr、IntPtr转换为raw数据、Marshal.Copy方法
作者:野牛程序员:2023-12-25 13:32:36C#阅读 2815
使用Marshal
类可以执行IntPtr
和byte[]
之间的转换,以及将IntPtr
转换为原始数据。以下是一些示例代码:
1. IntPtr转byte数组:
IntPtr yourIntPtr = /* 指向某个内存地址的 IntPtr */; int size = /* 数据的大小 */; byte[] byteArray = new byte[size]; Marshal.Copy(yourIntPtr, byteArray, 0, size);
2. byte数组转IntPtr:
byte[] yourByteArray = /* 要转换的 byte 数组 */; IntPtr yourIntPtr = Marshal.AllocHGlobal(yourByteArray.Length); Marshal.Copy(yourByteArray, 0, yourIntPtr, yourByteArray.Length);
请注意,在使用完yourIntPtr
后,需要释放内存,以免出现内存泄漏。可以使用Marshal.FreeHGlobal
方法来释放内存:
Marshal.FreeHGlobal(yourIntPtr);
3. IntPtr转换为原始数据:
如果你希望获取指向的原始数据,可以使用Marshal.ReadByte
或Marshal.Read
方法:
byte yourByte = Marshal.ReadByte(yourIntPtr); // 或 int yourInt = Marshal.ReadInt32(yourIntPtr); // 根据数据类型调整 Read 方法
4. 使用 Marshal.Copy 方法:
Marshal.Copy
方法可用于在不同数据类型之间复制数据。以下是一个示例,将IntPtr
中的数据复制到另一个IntPtr
:
IntPtr sourceIntPtr = /* 源 IntPtr */; IntPtr destinationIntPtr = /* 目标 IntPtr */; int size = /* 数据的大小 */; Marshal.Copy(sourceIntPtr, destinationIntPtr, 0, size);
这些示例代码演示了在C#中执行IntPtr
和byte[]
之间的基本转换,以及如何使用Marshal.Copy
方法。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:C# 根据路径删除文件或文件夹
- 下一篇:C#中的byte*的复制