У меня есть байтовый массив, к которому я хотел бы получить доступ по указателю Int32 (небезопасный контекст). Я делаю это
byte[] bgImageBytes = new byte[1000];
unsafe
{
fixed (byte* bgImgPtr = bgImageBytes)
{
// I have a byte pointer ... How can I get an Int32 pointer?
}
}
Я уже без проблем обращаюсь к указателю, возвращенному из kernel32.dll как к байтному и Int32-указателю. Но когда я пытаюсь сделать указатель Int32 на массив управляемых байтов (пример выше), он, кажется, жалуется на то, что он является управляемым кодом, поэтому он не будет работать.
Простое выполнение UInt32* bgImgIntPtr = (UInt32*)bgImgPtr;
приводит к MDA FatalExecutionEngineError: CLR был смертельно поврежден. Это чаще всего вызвано повреждением данных, которое может быть вызвано рядом проблем, таких как вызовы некорректных функций вызова платформы и передача неверных данных в CLR.
Моя цель: иметь указатели UInt32 и Byte на один байтовый массив, чтобы я мог читать «тепловую карту» Kinect как в виде целого числа, так и в виде отдельных цветов. Я знаю, что могу легко конвертировать между типами, но так как я работаю с несколькими массивами в разных форматах, было бы намного лучше, если бы я мог обращаться к ним напрямую, не конвертируя между ними все время. Происходит много простого копирования, так что это просто добавит накладные расходы для продолжения конвертации.