C言語 マルチバイト文字からワイド文字に変換 - stdlib.h - [ mbtowc ]
2008.11.07 Friday | by LRESULT
マルチバイト文字からワイド文字に変換するには、mbtowc()を使います。
マルチバイト文字とは、半角の「ABC123」という1バイト文字と、
全角の「あいうえお」という2バイト文字が混在した文字で、Shift_JISやEUC-JPという
文字セットがこれにあたります。
また、ワイド文字とは、2バイトで全ての文字が表現されている文字で、
Unicodeと呼ばれる、UCS-2やUTF-16(一部例外あり)が、これにあたります。
ワイド文字型を表す、wchar_t型は、C言語では、unsigned short型で定義され、
C++では、wchar_t型が予約語として扱われます。
(gccでは、wchar_t型は通常4バイトで強制2バイトオプションもあるらしい)
※ mbtowc()は、ロケールのLC_CTYPEの設定に依存する為、
日本語のマルチバイト文字を扱う際には、setlocale( LC_CTYPE, "jpn" )
という設定が必要になります。
書式 | int mbtowc( wchar_t *wc, const char *mc, size_t n ) |
---|---|
機能 | マルチバイト文字からワイド文字に変換 |
引数 | wchar_t *wc : 変換したワイド文字を格納するポインタ const char *mc : 変換元のマルチバイト文字 size_t n : 変換するバイト数 |
戻り値 | 成功すると、マルチバイト文字のバイト数を返し、 失敗すると、-1を返します。 |
マルチバイト文字「あ」をワイド文字の「あ」に変換してみます。 |
---|
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(void) { char *mc = "あ"; wchar_t wc; int len; setlocale( LC_CTYPE, "jpn" ); len = mbtowc( &wc, mc, MB_CUR_MAX ); printf( "マルチバイト文字長は %dバイト¥n", len ); printf( "ワイド文字は %lc¥n", wc ); return 0; } |
マルチバイト文字長は 2バイト ワイド文字は あ |
---|
と、表示されます。 ちなみに、ワイド文字をprintf()で表示するには、 %c や %s の前に、「w」か「l」を追加して、 %lc or %wc、%ls or %ws とすれば表示されるようです。(VC8で確認) |