2011-08-29 113 views
1

Aloha-everyone, 我想知道如何将intptr的内存内容转换为其等效数据。 我应该错过IntPtr的含义,我认为它是一个指向内存中某个地方的指针,例如一个字符串,我想获取该字符串。有没有办法做到这一点?谢谢从intptr复制内存内容

+1

** 1。** _“将内存内容转换为其等效数据”_没有任何意义。内存内容可以用无数种方式解释 - 你需要知道它代表什么(即你需要知道它的数据类型)。 ** 2。**一个'IntPtr'只是一个本地大小的整数(不像例如'Int32',它总是32位宽)。因此,在互操作场景中,它经常用于内存地址(指针)传递的地方。 – stakx

回答

5

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

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

这就是说,IntPtr实际上只是一个本地大小的整数(不像Int32,它总是32位宽)。因此,它经常被用在内存地址(指针)周围的互操作场景中......因此您可以在System.Runtime.InteropServices名称空间中找到上述方法。

3

一般情况下,您可以使用Marshal.Copy

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

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

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