C言語なら俺に聞け! Part 121
■ このスレッドは過去ログ倉庫に格納されています
0789デフォルトの名無しさん
2006/02/08(水) 09:48:01となってメモリ中に置かれ、その領域の先頭へのポインタとなる。
2. シングルクォーテーションで括った文字は char の値となる。
3. Lが先頭に付いているシングルクォーテーションで括られた文字(例 L'あ')は
wchar_t 型の値となる。wchar_t 型のビット数や使用するエンコーディングは
環境によって違うが、だいたいの場合は何の文字でも表せるようになっている。
(例: GCCのCでは32bitでUnicodeのUCS4)。
4. Lが先頭に付いているダブルクォーテーションで括られた文字列(例 L"あいう")は
NULLターミネートされたwchar_t型配列となってメモリ中に置かれ、その領域の
先頭へのポインタとなる。
5. wchar_t 型から char 配列への変換は mbtowc(), NULLターミネートされた
wchar_t 配列から char配列への変換は mbstowcs(), NULLターミネートされた
char 配列から wchar_t 型への変換は wctomb(), NULLターミネートされた
char 配列から wchar_t 型配列への変換は mbstowcs() を使用する。また、
これらの変換を行うためには setlocale() で適切なロケールを設定しておく
必要がある(UNIX系OSでは setlocale(LC_ALL, "") などとすると環境変数から
値を拾って勝手に設定してくれる)。
ということで、エンコーディングに関係なく1文字単位で処理をしたい場合は
wchar_t 型に変換してから行った方が楽。そんなことしないでただ保持して
出力するだけという場合は char のままでもいいが、char のビット数を
オーバーする文字だった場合は char 配列でないと保持しておくことができ
ないかも知れない。しかしビット数については環境依存であるため、ある
エンコーディングで16ビットになる文字も char 変数一つで扱えるかも
知れない(しかしそれに期待して書かれたプログラムは移植性がなくなる)。
■ このスレッドは過去ログ倉庫に格納されています