2011-06-06 19 views
8

Estoy pasando una matriz entera de tipo uint8 de MATLAB a una función MEX. ¿Cómo leo estos valores? Intenté usar:cómo leer una matriz entera en la función MEX

int *n; 
n = (int *) mxGetData(prhs[0]); 

pero los valores salen como basura. También probé

double *n; 
n= mxGetPr(prhs[0]); 

y en este caso también aparecen valores no deseados.

¿Cuál es la solución a esto?

Básicamente, quiero leer el valor entero en la función MEX, pero mxGetPr devuelve el tipo doble.

Respuesta

1

Debe asegurarse de que la cantidad de bytes que lee y la interpretación de estos bytes es la misma en los datos de entrada (que provienen de Matlab) y en la matriz de salida (la matriz que lee en el mex función). Como uint8 tiene una longitud de 8 bits, tanto double como int leerán un número incorrecto de bytes y malinterpretarán estos bytes.

Intente incluir el encabezado stdint.h, y utilice el tipo de datos uint8_t para la matriz en la que lee.

8

Tome un vistazo a la demostración explore.c MEX-función, que se puede abrir en MATLAB usando

edit([matlabroot '/extern/examples/mex/explore.c']); 

Allí encontrará un montón de funciones cuyos nombres comienzan con analyze_ y luego una tipo (por ejemplo, analyze_uint8). En esas funciones verá la salida de las llamadas a mxGetData ser echado a un tipo particular, C, así:

pr = (unsigned char *)mxGetData(array_ptr); 

pr ahora apunta a la parte real de array_ptr, una serie de unsigned char.

+0

Muchas gracias, SCFrench! – Serg

Cuestiones relacionadas