我有一个具有委托(delegate)的 .dll(不是我自己的)。这个委托(delegate)回调函数是:
“CallBackFN(ushort opCOde,IntPtr 有效负载,uint 大小,uint localIP)”
如何将 IntPtr 转换为 Byte[]?我认为 payload 实际上是 Byte[]。如果它不是 Byte[] 而是其他东西,我会丢失一些数据吗?
最佳答案
如果是byte[]
数组:
byte[] managedArray = new byte[size];
Marshal.Copy(pnt, managedArray, 0, size);
如果不是byte[]
,则Marshal.Copy中的size参数是数组元素个数,不是字节大小。所以,如果你有一个 int[]
数组而不是一个 byte[]
数组,你必须除以 4(每个整数的字节数)才能得到正确的要复制的元素,假设通过回调传递的大小参数指的是字节数。
关于C# 如何从 IntPtr 获取 Byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5486938/