Convert Matlab string to wchar in C-Mex under Windows and Linux

4 views (last 30 days)
I want to convert a Matlab string to a wchar string, such that I can use e.g. either the C-function _wopen? Or to a LPCWSTR under Windows?
Matlab's CHAR arrays use 2 bytes per element. Inside a C-Mex function I can use mxArrayToString to convert a Matlab CHAR array to a C char * vector. The documentation of mxArrayToString state, that "it supports multibyte character sets". Unfortunately this is not explained with any further details.
Currently under Windows I copy the contents of the mxChar array to a wchar_t vector and append a L'\0'. It seems to work, but I'm not really convinced that this is stable. Under Linux a wchar has a length of 4 bytes and the direct copy is not sufficient.
Are Matlab CHARs UTF16 encoded? How does mxArrayToString support multibyte charcter sets exactly? How do I convert mxChar to wchar correctly and efficiently under Windows and Linux?
  2 Comments
Kaustubha Govind
Kaustubha Govind on 16 Mar 2011
Jan: If you don't receive a reply here, Tech Support might be able to give you an answer.
Jan
Jan on 16 Mar 2011
Edited: Jan on 4 Nov 2012
@Kaustubha: Thanks. There is a 2nd level question, which can be answered here only: How many people use Unicode strings already? Matlab decided for 2 byte CHARs a long time ago, but if nobody is able to use this correctly, this feature is simply a waste of memory. The CSSM thread http://www.mathworks.com/matlabcentral/newsreader/view_thread/301249 was a revealation: There are some undocumented functions. But the marvelous idea not to use 1-byte CHARs should be accompanied by a documented and stable interface.

Sign in to comment.

Answers (1)

Alexander H
Alexander H on 25 Jan 2019
Jan, thanks for your post.
Recently, I got entangled in passing Chinese word (non-latin character) from Matlab to mex. I tried wchar_t, mxChar, none of them works. While, mxArrayToString you mentioned works exactly as I want. Since I just want my mex function can deal with Chinese file path , so I didn't copy it to somewhere else. The code is simply as:
char *filename = mxArrayToString(prhs[0]);

Categories

Find more on Data Type Conversion 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!