Copying 2-D C++ array into mxArrays
1 view (last 30 days)
Show older comments
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++.
0 Comments
Accepted Answer
James Tursa
on 30 May 2014
Edited: James Tursa
on 30 May 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 Comments
James Tursa
on 30 May 2014
Edited: James Tursa
on 30 May 2014
Correct. I had modified some double code that I already had and missed that. Thanks.
More Answers (0)
See Also
Categories
Find more on Write C Functions Callable from MATLAB (MEX Files) in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!