C# – 将unsafe byte *转换为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而不是不安全的指针来解决问题吗? 如果是这样,那么根本不需要不安全的代码。

元帅class可以帮助你。

 byte[] bytes = new byte[length]; for(int i = 0; i < length; ++i) bytes[i] = Marshal.ReadByte(yourPtr, i); 

我想你也可以使用Marshal.Copy。