MATLAB Answers

Jan Simon

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

Asked by Jan Simon
on 14 Mar 2011

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?


Jan: If you don't receive a reply here, Tech Support might be able to give you an answer.

@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 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.


No products are associated with this question.

0 Answers

Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!