我想从一个IntPtr指针获取数据到一个字节数组中。我可以使用下面的代码来做到这一点:可以将IntPtr强制转换为字节数组而无需执行Marshal.Copy?
IntPtr intPtr = GetBuff();
byte[] b = new byte[length];
Marshal.Copy(intPtr, b, 0, length);
但上面的代码强制从IntPtr到字节数组的复制操作。问题数据很大时,这不是一个好的解决方案。
有没有办法将IntPtr转换为字节数组?例如,将以下工作:
byte[] b = (byte[])intPtr
这将消除复制操作的需要。
另外:我们如何确定IntPtr指向的数据长度?
因为'IntPtr'指向*非托管内存*,所以您应该复制数据! – Yahia 2012-03-16 06:00:37
感谢您的快速回复,但IntPtr是从C++导出函数返回的,所以我可以在任何需要的地方管理和删除它。我不想复制数据,因为数据是视频缓冲区,所以它非常大。复制会造成糟糕的表现。谢谢! – TTGroup 2012-03-16 06:04:57
这是真的没有理由去不安全的做法...你真的应该复制的内容 - 有几种安全的方法来做到这一点(一些比其他人快)... – Yahia 2012-03-16 06:07:07