从intptr复制内存内容
本文关键字:内存 复制 intptr | 更新日期: 2023-09-27 18:06:49
大家好,我想知道如何将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类包含许多其他方法,用于执行类似的本地/托管编组任务。