Copying 2-D C++ array into mxArrays

If I have a pointer *ptr that is pointing to a 2-D array of UINT16 type in C++, what code in a CMEX file will convert that data to a mxArray that can be output to MATLAB? Ultimately what I want is a myfunction.mexw64 file where Z = myfunction executed in MATLAB provides the original 2-D array that I have right now in C++.

 Respuesta aceptada

James Tursa
James Tursa el 30 de Mayo de 2014
Editada: James Tursa el 30 de Mayo de 2014
If the array elements are in column order in the C++ file, then a simple copy will suffice. E.g.,
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
unsigned short *pr;
unsigned short ptr[] = {1,2,3,4,5,6};
mwSize i, m = 2, n = 3, mn = m*n;
plhs[0] = mxCreateNumericMatrix(m,n,mxUINT16_CLASS,mxREAL);
pr = mxGetPr(plhs[0]);
for( i=0; i<mn; i++ ) {
pr[i] = ptr[i];
}
}
In the above code I have used an array for ptr for simplicity, but a pointer to a block of memory will work just as well.
If the elements are in row order instead of column order, a transpose will be involved. If that is the case, let me know and I will post that code. (Or you can just transpose it at the MATLAB level)

2 comentarios

Robert Hinkey
Robert Hinkey el 30 de Mayo de 2014
Editada: Robert Hinkey el 30 de Mayo de 2014
Thanks James. One small adjustment is needed, the line:
pr = mxGetPr(plhs[0]);
should read:
pr = (unsigned short*)mxGetData(plhs[0]);
since the mxGetPr is for type double only. The original line maybe works for some people, but my Visual C++ 2008 compiler doesn't like it.
James Tursa
James Tursa el 30 de Mayo de 2014
Editada: James Tursa el 30 de Mayo de 2014
Correct. I had modified some double code that I already had and missed that. Thanks.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Write C Functions Callable from MATLAB (MEX Files) en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 30 de Mayo de 2014

Editada:

el 30 de Mayo de 2014

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by