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" )
  という設定が必要になります。


mbtowc
書式 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で確認)

カテゴリ:C言語 stdlib.h | 23:30 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

http://simd.jugem.jp/trackback/119

トラックバック