Nanashi-softプログラマ専用Windows Mobile 6


◇Windows Mobile 6-UNICODE文字列を操作する関数-

基本的に 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型を wchar_t型に変換

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の引数は文字数、になるのが暗黙のルールのようですよ

・1文字ずつ扱う

変数名[添え字]

一番先頭は 0から始まり、最後は NULLが入っている

・1文字代入

変数名[添え字] = L'1文字';

・1文字ずつ比較

if(変数名[添え字] == L'1文字'){
  //一致した
}else{
  //一致しなかった
}

Unicodeもシングルクォーテーションでくくると一文字とみなされます
NULLと比較したい場合は「L'\0'」です



Nanashi-softプログラマ専用Windows Mobile 6