ワイド文字


2バイトのchar

ANSI C は標準でワイド文字をサポートしている
ワイド文字とは、1文字表現するのに2バイト用いる文字のことを言います
同時に1バイト以上の文字のことをマルチバイト文字と言います

これまで、文字コードはASCIIコードを用いてきました
これは1文字を1バイト( char 型 )で表現できるコードで、世界的に標準のコードです
しかし、1バイトだけでは中国語や日本語のような漢字や記号を多く持つ言語を表せません
そこでワイド文字が使われるというわけです

ワイド文字は国際的なアプリケーションの開発には必要な知識です
ことUnicodeなどは非常に有名ですね

ワイド文字の型はwchar_tです
これは標準型として WCHAR.H ヘッダファイルに定義されています
//または STDDEF.H、 STDLIB.H ヘッダファイルなど

typedef unsigned short wchar_t;

wchar_t 型は unsigned short int すなわち16ビットです
当然、short int 型なので、通常の文字列関数などには使用できません
#include<stdio.h>
#include<stdlib.h>

int main() {
	wchar_t ch;
	printf("%d" , sizeof ch);
	return 0;
}
予想どおり、2という整数が標準出力に表示されます

次は、ワイド文字型で文字列を表現してみましょう
ワイド文字として文字列を格納するには、文字列の前にL(Long)プレフィックスを指定します
これは、コンパイラにワイド文字列として扱うように指示するものです

wchar_t wc[] = L"String...";

ワイド文字列は、必ず1文字2バイトの領域を確保します
Lとクォーテーションの間にホワイトスペースが入ってはいけません
#include<stdio.h>
#include<stdlib.h>

int main() {
	char ch[] = "Kitty on your lap";
	wchar_t wch[] = L"Kitty on your lap";

	printf("char 型文字列 = %d\n" , sizeof ch);
	printf("wchar_t 型文字列 = %d\n" , sizeof wch);
	return 0;
}
プログラムを実行すると、このような結果になりました

char 型文字列 = 18
wchar_t 型文字列 = 36

通常の char 型変数 ch 配列のサイズは、文字数 + 1 です(最後はヌル文字)
これに対し wchar_t 型変数 wch 配列は、(文字数 + 1) × 2 のサイズになります
ワイド文字はヌルも字も当然2バイトになるので注意していください

同様の方法で、wchar_t のポインタ型変数に文字列を代入することも可能です
また、単一のワイド文字の前に L プレフィックスを付けても間違いではありません

ほとんどの場合、wchar_t 型は 2バイト文字ですが
文字コードによっては、それ以上であることも考えられます
ワイド文字の文字コードの定義は ANSI C ではされていないので、実装依存になります



前のページへ戻る次のページへ