当前位置:首页C# > 正文

C# IntPtr转byte数组、byte[]转Intptr、IntPtr转换为raw数据、Marshal.Copy方法

作者:野牛程序员:2023-12-25 13:32:36C#阅读 2815

使用Marshal类可以执行IntPtrbyte[]之间的转换,以及将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.ReadByteMarshal.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#中执行IntPtrbyte[]之间的基本转换,以及如何使用Marshal.Copy方法。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击