C言語 マルチバイト文字列からワイド文字列に変換 - stdlib.h - [ mbstowcs ]

2008.11.08 Saturday | by LRESULT


ルチバイト文字列からワイド文字列に変換するには、mbstowcs()を使います。

マルチバイト文字とは、半角の「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バイトオプションもあるらしい)

mbstowcs()は、ロケールLC_CTYPEの設定に依存する為、
  日本語のマルチバイト文字を扱う際には、setlocale( LC_CTYPE, "jpn" )
  という設定が必要になります。


mbstowcs
書式 int mbstowcs( wchar_t *ws, const char *ms, size_t n )
機能 マルチバイト文字列からワイド文字列に変換
引数 wchar_t *ws : 変換したワイド文字列を格納するポインタ
const char *ms : 変換元のマルチバイト文字列
size_t n : ワイド文字の文字数を指定
戻り値 成功すると、変換したワイド文字の文字数を返し、
失敗すると、-1を返します。





サンプルコード
マルチバイト文字列「テストtestてすと」をワイド文字列に変換し、
ワイド文字の文字数と、ワイド文字列を表示してみます。

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(void)
{
  char *ms = "テストTestてすと";
  wchar_t ws[100];
  int len;

  setlocale( LC_CTYPE, "jpn" );

  len = mbstowcs( ws, ms, 100 );
  printf( "ワイド文字数は %d文字¥n", len );
  printf( "ワイド文字は %ls¥n", ws );

  return 0;
}




結果
ワイド文字数は 10文字
ワイド文字は テストtestてすと
と、表示されます。

1バイト文字と2バイト文字が混在してますが、
ちゃんとワイド文字列に変換されています。

また、ワイド文字列をprintf()で表示するには、
%ls or %wsで表示出来るようです。(VC8で確認)

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


コメント

管理者の承認待ちコメントです。

| - | 2012/05/11 2:56 PM |

コメントする











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

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

トラックバック