С# - преобразовать небезопасный байт * в байт []
У меня есть 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);
Я думаю, вы могли бы использовать маршал. Копи тоже.