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

7 ビュー (過去 30 日間)
Jan
Jan 2011 年 3 月 14 日
回答済み: Alexander H 2019 年 1 月 25 日
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 件のコメント
Kaustubha Govind
Kaustubha Govind 2011 年 3 月 16 日
Jan: If you don't receive a reply here, Tech Support might be able to give you an answer.
Jan
Jan 2011 年 3 月 16 日
編集済み: Jan 2012 年 11 月 4 日
@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.

サインインしてコメントする。

回答 (1 件)

Alexander H
Alexander H 2019 年 1 月 25 日
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]);

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by