从intptr复制内存内容

时间:2011-08-29 07:25:08

标签: c#

Aloha的每个人, 我想知道如何将intptr的内存内容转换为其等效数据。 我应该忽略IntPtr的含义,我认为它是一个指向内存中某处的指针,例如一个字符串,我想得到那个字符串。有没有办法做到这一点?谢谢

3 个答案:

答案 0 :(得分:5)

查看System.Runtime.InteropServices.Marshal类(MSDN的超链接)。

Copy方法接受IntPtr来源并将字符复制到char[]数组中。将其转换为常规string应该很容易。还有其他方法可以不同地解释内存内容;也就是说,您需要知道您正在查看的内存位置所期望的类型数据,然后您需要选择适当的Copy重载。

话虽如此,IntPtr实际上只是一个原生大小的整数(与Int32不同,它总是32位宽)。因此,它通常用在内存地址(指针)传递的地方的互操作场景中......因此,您可以在System.Runtime.InteropServices命名空间中找到上述方法。

答案 1 :(得分:3)

通常,您可以使用Marshal.Copy,例如

IntPtr pointer = ...;
byte[] buffer = new byte[100];
Marshal.Copy(pointer, buffer, 0, buffer.Length);

从指定的内存地址检索100个字节到托管字节数组。

“字符串”是一个非常复杂的概念 - 字符串是什么样的?你事先知道它的长度吗?是零终止?你知道它的编码吗?等

答案 2 :(得分:1)

您正在寻找

Marshal.PtrToStringAnsiMarshal.PtrToStringUni。 Marshall类包含许多用于执行类似本机/托管编组任务的其他方法。