我有一个指向已知长度的本地byte数组的unsafe
byte*
。如何将其转换为byte[]
?
unsafe
sbyte*
指向以零终止的本地字符串可以轻松转换为C#的string
,因为有一个转换构造函数可以实现这个目的,但是我找不到将byte*
转换为byte[]
的简单方法。
如果ptr
是您的不安全指针,而数组的长度为len
,则可以像这样使用Marshal.Copy
:
byte[] arr = new byte[len];
Marshal.Copy((IntPtr)ptr, arr, 0, len);
但我确实想知道你是如何获取到指向本地内存的不安全指针的。你真的需要使用不安全指针吗?或者您可以通过使用 IntPtr
替代不安全指针来解决问题吗?如果是这样,那么可能根本没有必要使用不安全代码。
IntPtr
和 Marshal.Copy
。 - David HeffernanSpan<T>
。 - David HeffernanMarshal类可以帮助你。
byte[] bytes = new byte[length];
for(int i = 0; i < length; ++i)
bytes[i] = Marshal.ReadByte(yourPtr, i);
我认为您也可以使用Marshal.Copy。
Marshal.ReadByte
,而是可以使用传统的指针解引用和指针递增。如果您想要在循环中执行复制操作,而不是使用 Marshal.Copy
,那么这种方法就可以派上用场。 - David Heffernan
byte[]
不应该是const byte*
吗?所以尝试将指针索引为*(myByte+index);
但我猜如果这么容易你就不会问了... - Shark*(myByte+index)
写成myByte[index]
,无需进行转换。 - H Hbyte[]
吗? - H H