C# 如何从 IntPtr 获取 Byte[]

标签 c# byte bytearray intptr

我有一个具有委托(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/

相关文章:

c# - 使用自定义 chrome 和 DWM 时重新绘制窗口标题

c# - 部署时的 Azure DevOps 管道问题

c# - 从字节数组中读取位范围

c# - 从 SQL Server 中检索 varbinary(MAX) 到 C# 中的 byte[]

java - 从流中安全解析字节数组的最佳分隔符

c# - 仅当 SELECT 返回时才执行 DELETE

c# - 集合问题(.NET 3.5,C#)

python - 如何将一个字节分成上半部和下半部

c - 打包两个 8 位值

java - 字节到字符串,反之亦然