Win32/64技術 001 マルチバイト文字列→ワイド文字列変換
概要
マルチバイト文字列をワイド文字列に変換する手法についてです。
char pchstr[] = "Win32/64アプリケーション";
int iwcharLen = MultiByteToWideChar(932, 0, pchstr, -1, nullptr, 0);
wchar_t* wchstr = new wchar_t[iwcharLen];
MultiByteToWideChar(932, 0, pchstr, -1, wchstr, iwcharLen);
■MultiByteToWideChar(UINT, DWORD, LPCCH, int, LPWSTR, int)
第1引数: UINT CodePage
文字コードの変換もできます。VisualStudioは主にShiftJISで処理されています。932を指定しないと、文字化けが発生します。デバッグ時にも変数にカーソルを当てて表示されるポップアップのクイックウォッチでも文字化けが発生しますし、変数の内容を確認するデバッグビューにある自動、ろーかる、クイックタブでも文字化けした状態になります。CP_UTF8を使う場合はVisualStudioの設定を変更しないといけません。ファイルに出力したり、ShiftJISの範囲で表現できない文字を扱う場合は、文字化けが発生しますが、ファイルにそのまま出力して、UTF-8の文字コードを閲覧できるビューワで開くといった作業が必要です。
第2引数: DWORD dwFlags
変換の種類を示すフラグ。
第3引数: LPCCH lpMultiByteStr
変換する文字列(char配列)へのポインター。
第4引数: int cbMultiByte
-1の場合は元の文字列の終端に\0があるところまで変換します。0の場合は変換が失敗します。正の数の場合は指定されたバイト数まで変換をします。
第5引数: LPWSTR lpWideCharStr
変換後の文字列(wchar_t配列)へのポインター。
第6引数: int cchWideChar
第5引数の文字列のバイト数を設定します。\0の1バイトも含めた値です。第6引数が0のときは、変換後必要になる文字列のバイト数を戻り値にします。
関数が成功した場合は、バッファーに書き込まれた文字数が返却されます。