在此示例中,我们说明了MATLAB MEX中的字符串操作。我们将创建一个MEX函数,该函数接受来自MATLAB的字符串作为输入,将数据复制到C字符串中,对其进行修改,然后将其转换回mxArrayMATLAB端。
此示例的主要目的是说明如何将字符串从MATLAB转换为C / C ++,反之亦然。
#include "mex.h" #include <cstring> void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { // 检查参数数量 if (nrhs != 1 || nlhs > 1) { mexErrMsgIdAndTxt("StringIO:WrongNumArgs", "参数数量错误。"); } // 检查输入是否为字符串 if (mxIsChar(prhs[0])) { mexErrMsgIdAndTxt("StringIO:TypeError", "Input is not a string"); } // 将字符数据从mxArray复制到C样式的字符串(以Null结尾) char *str = mxArrayToString(prhs[0]); // 以某种方式操作字符串 if (strcmp("theOneString", str) == 0) { str[0] = 'T'; // 大写第一个字母 } else { str[0] = ' '; // 还有其他事吗 } // 返回新的修改后的字符串 plhs[0] = mxCreateString(str); // 空闲分配的内存 mxFree(str); }
此示例中的相关功能为:
mxIsChar测试anmxArray是否为mxCHAR类型。
mxArrayToString将mxArray字符串的数据复制到char *缓冲区。
mxCreateString从创建一个mxArray字符串char*。
附带说明一下,如果您只想读取字符串,而不要修改它,请记住将其声明为const char*具有速度和鲁棒性。
最后,编译后,我们可以从MATLAB中调用它:
>> mex stringIO.cpp >> strOut = stringIO('theOneString') strOut = TheOneString >> strOut = stringIO('somethingelse') strOut= omethingelse