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