C言語の標準関数を目的別に調べることができる辞典

ホーム > C 標準関数逆引き辞典 > 文字 > マルチバイト文字をワイド文字に変換する

C 標準関数逆引き辞典

:: 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);

ソースファイル

len1wc'a' になります。

▼ 関数

int mbtowc(wchar_t *wc, const char *mb, size_t sz);

マルチバイト文字 mb をワイド文字に変換します。
変換したワイド文字は、wc に格納されます。

sz には、変換するバイト数を「 1MB_CUR_MAX 」の範囲で指定します。

MB_CUR_MAX の値は、ロケールによって変わります。

  • ロケールを設定しない場合 … 1
  • ロケールを日本語( "ja" )に設定した場合 … 2

sz2 であれば、1バイト文字と2バイト文字の両方を変換できます。
通常は szMB_CUR_MAX を指定します。

変換に成功した場合は、変換した文字のバイト数を返します。

変換に失敗した場合は -1 を返します。
(正当なマルチバイト文字でない場合)

mbNULL または NULL文字'\0' )の場合は 0 を返します。

●引数

wc … 変換したワイド文字を格納する変数へのポインタ
mb … 変換するマルチバイト文字へのポインタ
sz … 変換するバイト数

●戻り値

・変換に成功 … 変換した文字のバイト数
・変換に失敗 … -1
mbNULL または NULL文字0

●補足

全角文字は文字列になりますが、そのまま指定できます。

char mbs[] = "あ";
wchar_t wc;
int len;

setlocale(LC_ALL, "ja");  /* ロケールを日本語に設定 */

len = mbtowc(&wc, mbs, MB_CUR_MAX);

ソースファイル

len2wc'あ' になります。

▼ 参考

マルチバイト文字列を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]'ム' になります。

注目キーワード ベスト5

  1. セキュリティ
  2. ホスティング
  3. レンタルサーバ
  4. ファイル復旧
  5. ハードディスク修復

文字 - character -


ホーム > C 標準関数逆引き辞典 > 文字 > マルチバイト文字をワイド文字に変換する

Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com