从intptr复制内存内容

本文关键字:内存 复制 intptr | 更新日期: 2023-09-27 18:06:49

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

从intptr复制内存内容

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

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

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

通常,您可以使用Marshal。为此复制,例如

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

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

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

Marshal。PtrToStringAnsi和Marshal。PtrToStringUni就是您想要的。Marshall类包含许多其他方法,用于执行类似的本地/托管编组任务。