如何将IntPtr转换为byte *

我正在通过interop调用一个返回out IntPtr参数的方法。 如何获取此IntPtrbyte*以便我可以对其进行操作? 我尝试了以下方法:

 fixed(byte* ptr = (byte)myIntPtr) 

但它不起作用。 任何帮助,将不胜感激!

你可以简单地写:

 byte* ptr = (byte*)int_ptr; 

您不必使用fixed关键字。 你不想固定IntPtr,对吗?

myIntPtr.ToPointer()

如果您不希望应用程序中存在不安全的代码,则必须使用System.Runtime.InteropServices.Marshal的方法,或者(甚至更好)声明您的interop函数的参数类型,以便自动进行封送处理。

我不想在我的应用程序中使用“不安全的代码”,所以我做了以下操作将IntPtr转换为byte []。 给定一个名为“unsafeDataBlock”的IntPtr:

 var byteArray = new byte[dataBlockSize]; System.Runtime.InteropServices.Marshal.Copy(unsafeDataBlock, byteArray, 0, dataBlockSize); 

这似乎对我有用,我没有使用Interop,但仍在调用C Sharp的托管C ++函数。 然而,托管C ++函数称为非托管代码,因此它完成了与Interop相同的function。

无论如何,在从c-sharp调用的C ++函数中,我使用了这段代码:

 (anyPointerType*) pointer = (anyPointertype*) myIntPtr.ToPointer();