Nanashi-soft○プログラマ専用○Windows Mobile 6○
基本的に Unicodeを使う事が前提のプログラミングなので、色々特殊な操作が必要になります
そんな固有な事柄を覚える気は無いので、ここにまとめて置いてコピペで使おう、と言うページです
wchar_t 変数名[文字数+1];
内部的には 1バイト文字も 2バイト使用される。サロゲートペア問題があるので 4バイトになる文字もあるだろう
最後に NULLの文が必要なので、+1分確保する
ちなみに NULLも 2バイトです。よく書く \0とは違うので注意のこと
wchar_t *変数名 = L"文字列";
定数なので、後で文字列を変更する事はできない
「L」は Unicode文字列を示す
wcscpy(変数名, L"文字列");
もちろん両方変数も可能
wcscpy(変数名1, 変数名2);
wcscat(変数名, L"文字列");
先頭から指定文字数
wcsncpy(変数名, L"文字列", 追加する文字数);
wcslen(変数名);
swprintf(変数名, L"構文", 値, 値...);
書き方は普通のsprintfと同じ
例)
wchar_t wmoji[100];
swprintf(wmoji, L"x=%d, y=%d", x, y);
if (wcscmp(変数名, L"文字列") == 0){ }
普通のと同じように 0になれば等しい
MessageBoxW(0, L"内容", L"タイトル", MB_OK);
変数に代入した文字を表示
wchar_t *変数名 = L"内容"; MessageBoxW(0, 変数名, L"タイトル", MB_OK);
char s1[文字バイト数+1]; wchar_t s2[文字数+1]; strcpy(s1, "文字列"); MultiByteToWideChar(CP_UTF8, 0, s1, strlen(s1)+1, s2, 文字数+1);
ポイントは、NULLも含めた文字バイト数を指定する必要がある点です
char、wchar_tで確保するサイズは十分な文字数分を用意して下さい。不足するとはみ出して化けます
元ソースが UTF-8である事が前提ですので、strlenで元の文字バイト数を取得しています
日本語と英語が混ざった例
char s1[14+1]; wchar_t s2[6+1]; strcpy(s1, "日本語でOK"); MultiByteToWideChar(CP_UTF8, 0, s1, 15, s2, 7);
わざと、ピッタリの charと wchar_tを確保して書いてみました
charのサイズはバイト数で、wchar_tの引数は文字数、になるのが暗黙のルールのようですよ
変数名[添え字]
一番先頭は 0から始まり、最後は NULLが入っている
変数名[添え字] = L'1文字';
if(変数名[添え字] == L'1文字'){ //一致した }else{ //一致しなかった }
Unicodeもシングルクォーテーションでくくると一文字とみなされます
NULLと比較したい場合は「L'\0'」です