:: reverse dictionary ::
※ソースファイルについて
マルチバイト文字をワイド文字に変換するには、mbtowc 関数を使います。
#include <locale.h> #include <stdlib.h>
char mb = 'a'; wchar_t wc; int len; setlocale(LC_ALL, "ja"); /* ロケールを日本語に設定 */ len = mbtowc(&wc, &mb, MB_CUR_MAX);
len は 1 、wc は 'a' になります。
int mbtowc(wchar_t *wc, const char *mb, size_t sz);
マルチバイト文字 mb をワイド文字に変換します。
変換したワイド文字は、wc に格納されます。
sz には、変換するバイト数を「 1 〜 MB_CUR_MAX 」の範囲で指定します。
MB_CUR_MAX の値は、ロケールによって変わります。
"ja" )に設定した場合 … 2
sz が 2 であれば、1バイト文字と2バイト文字の両方を変換できます。
通常は sz に MB_CUR_MAX を指定します。
変換に成功した場合は、変換した文字のバイト数を返します。
変換に失敗した場合は -1 を返します。
(正当なマルチバイト文字でない場合)
mb が NULL または NULL文字( '\0' )の場合は 0 を返します。
wc … 変換したワイド文字を格納する変数へのポインタ
mb … 変換するマルチバイト文字へのポインタ
sz … 変換するバイト数
・変換に成功 … 変換した文字のバイト数
・変換に失敗 … -1
・mb が NULL または NULL文字 … 0
全角文字は文字列になりますが、そのまま指定できます。
char mbs[] = "あ"; wchar_t wc; int len; setlocale(LC_ALL, "ja"); /* ロケールを日本語に設定 */ len = mbtowc(&wc, mbs, MB_CUR_MAX);
len は 2 、wc は 'あ' になります。
マルチバイト文字列を1文字ずつワイド文字に変換することもできます。
char mbs[] = "Cプログラム"; wchar_t wcs[10]; int len = 0; /* 変換した文字のバイト数 */ int index = 0; /* 変換する文字のインデックス */ int count = 0; setlocale(LC_ALL, "ja"); /* ロケールを日本語に設定 */ len = mbtowc(&wcs[count], mbs, MB_CUR_MAX); while (len > 0) { index += len; count++; len = mbtowc(&wcs[count], mbs + index, MB_CUR_MAX); }
wcs[0] は 'C' 、wcs[1] は 'プ' 、wcs[2] は 'ロ' 、wcs[3] は 'グ' 、wcs[4] は 'ラ' 、wcs[5] は 'ム' になります。
Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com