¿Se puede convertir IntPtr en una matriz de bytes sin hacer un Marshal.Copy?

Quiero obtener datos de un puntero IntPtr en una matriz de bytes. Puedo usar el siguiente código para hacerlo:

IntPtr intPtr = GetBuff();
byte[] b = new byte[length];
Marshal.Copy(intPtr, b, 0, length);

Pero el código anterior fuerza una operación de copia desde IntPtr en la matriz de bytes. No es una buena solución cuando los datos en cuestión son grandes.

¿Hay alguna forma de convertir un IntPtr en una matriz de bytes? Por ejemplo, funcionaría lo siguiente:

byte[] b = (byte[])intPtr

Esto eliminaría la necesidad de la operación de copia.

Además: ¿cómo podemos determinar la longitud de los datos señalados por IntPtr?

Respuestas a la pregunta(8)

Su respuesta a la pregunta