С# - преобразовать небезопасный байт * в байт []

У меня есть unsafe byte*, указывающий на собственный массив байтов известной длины. Как преобразовать его в byte[]?

An unsafe sbyte*, указывающий на родную строку с нулевым завершением, может быть легко преобразован в С# string, потому что существует конструктор преобразования для этой цели, но я не могу найти простой способ преобразования byte* в byte[].

Ответ 1

Если ptr - ваш небезопасный указатель, а массив имеет длину len, вы можете использовать Marshal.Copy следующим образом:

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

Но я действительно удивляюсь, как вы пришли небезопасным указателем на собственную память. Вам действительно небезопасно здесь, или вы можете решить проблему, используя IntPtr вместо небезопасного указателя? И если это так, то, вероятно, нет необходимости в небезопасном коде вообще.

Ответ 2

Класс Marshal может помочь вам.

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

Я думаю, вы могли бы использовать маршал. Копи тоже.