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" )
という設定が必要になります。
書式 | 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> |
ワイド文字数は 10文字 ワイド文字は テストtestてすと |
---|
と、表示されます。 1バイト文字と2バイト文字が混在してますが、 ちゃんとワイド文字列に変換されています。 また、ワイド文字列をprintf()で表示するには、 %ls or %wsで表示出来るようです。(VC8で確認) |