Aloha-everyone, 我想知道如何将intptr的内存内容转换为其等效数据。 我应该错过IntPtr的含义,我认为它是一个指向内存中某个地方的指针,例如一个字符串,我想获取该字符串。有没有办法做到这一点?谢谢从intptr复制内存内容
1
A
回答
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字节到托管字节数组。
“一串”是一个非常复杂的概念 - 什么样的的字符串?你事先知道它的长度吗?它是零终止的吗?你知道它的编码吗?等等
1
Marshal.PtrToStringAnsi和Marshal.PtrToStringUni是你在找什么。 Marshall类包含许多用于执行类似的本地/托管编组任务的其他方法。
相关问题
- 1. 复制内容
- 2. 复制内容
- 3. IntPtr导致内存泄漏?
- 4. 复制的内容,而不复制现有内容
- 5. Drupal的,从内容的值复制到另一个内容
- 6. 从网页复制内容 - 和粘贴内容+链接
- 7. 复制内存块
- 8. 复制内存块
- 9. 从iframe中复制内容到输入
- 10. 复制我cloudService内容从Subscription1到Subscription2
- 11. 从QProcess复制文件夹的内容
- 12. 从单元格内容复制链接
- 13. 复制课程内容
- 14. 复制文件夹内容
- 15. ASP.NET - 访问复制内容
- 16. 复制一段内容
- 17. 宏查询 - 复制内容
- 18. Drupal 7内容复制
- 19. Android ImageView复制内容LazyLoad
- 20. 在TSQL中复制内容
- 21. jQuery .append()复制内容?
- 22. REST分页内容复制
- 23. 复制元素的内容
- 24. C#Pinvoke IntPtr结构和内存
- 25. 将IntPtr指向的内存的内容发送到C#中的MemoryStream变量中。
- 26. 如何将文件的内容复制到虚拟内存中?
- 27. JVM:什么时候JVM需要复制内存内容
- 28. 有效地从私有内存复制到本地内存
- 29. cuda从全局内存复制数组到共享内存
- 30. Cuda - 从设备全局内存复制到纹理内存
** 1。** _“将内存内容转换为其等效数据”_没有任何意义。内存内容可以用无数种方式解释 - 你需要知道它代表什么(即你需要知道它的数据类型)。 ** 2。**一个'IntPtr'只是一个本地大小的整数(不像例如'Int32',它总是32位宽)。因此,在互操作场景中,它经常用于内存地址(指针)传递的地方。 – stakx