C#-将不安全的字节*转换为字节[]

本文关键字:字节 转换 不安全 C#- | 更新日期: 2023-09-27 18:21:44

我有一个指向已知长度的本机字节数组的unsafe byte*。如何将其转换为byte[]

指向零终止的本机字符串的unsafe sbyte*可以很容易地转换为C#string,因为有一个转换构造函数用于此目的,但我找不到将byte*转换为byte[]的简单方法。

C#-将不安全的字节*转换为字节[]

如果ptr是不安全的指针,并且数组的长度为len,则可以这样使用Marshal.Copy

byte[] arr = new byte[len];
Marshal.Copy((IntPtr)ptr, arr, 0, len);

但我确实想知道你是如何找到一个不安全的指向本地内存的指针的。你真的需要这里的unsafe吗?或者你能用IntPtr代替unsafe指针来解决问题吗?如果是这样的话,那么可能根本不需要不安全的代码。

Marshal类可以帮助您。

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

我想你可以用元帅。也收到。