「Win32/64技術 001 マルチバイト文字列→ワイド文字列変換」の版間の差分

提供:yonewiki
47行目: 47行目:


 関数が成功した場合は、バッファーに書き込まれた文字数が返却されます。
 関数が成功した場合は、バッファーに書き込まれた文字数が返却されます。
 この関数はWINAPIの関数です。<windows.h>を読み込んでおけば使えます。良く似た関数にはmbstowcs_sという関数が有ります。逆変換はWideCharToMultiByteが対応していて良く似た関数もwcstombs_sというのがあります。


 
 


[[Win32/64_アプリケーション開発#処理技術|Win32/64_アプリケーション開発]]に戻る。
[[Win32/64_アプリケーション開発#処理技術|Win32/64_アプリケーション開発]]に戻る。

2023年10月27日 (金) 07:30時点における版

Win32/64_アプリケーション開発に戻る。

概要

 マルチバイト文字列をワイド文字列に変換する手法についてです。


    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で処理されています。MicrosoftのShiftJISである932を指定しないと、文字化けが発生します。でも普通はワイド文字はUTF-16を使います。UTF-8は可変バイトの1バイトか3バイトで主に表され、ごく稀に4バイトになります。UTF-16も万能ではありません。UTF-32こそが全ての文字を表せる4バイト文字の集まりなのです。万能は言い過ぎたわ。容量は喰いますからね。char型でデバッグ時にも変数にカーソルを当てて表示されるポップアップのクイックウォッチでも文字化けが発生しますし、開発期間中は932がおすすめだな。でも意識出来ないんなら危険な使い方ですね。変数の内容を確認するデバッグビューにある自動、ローカル、クイックタブでも文字化けした状態になります。CP_UTF8を使う場合はVisualStudioの設定を変更しないといけませんかね。ファイルに出力したり、リテラルはu8プレフィックス使ったり、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のときは、変換後必要になる文字列のバイト数を戻り値にします。


 関数が成功した場合は、バッファーに書き込まれた文字数が返却されます。


 この関数はWINAPIの関数です。<windows.h>を読み込んでおけば使えます。良く似た関数にはmbstowcs_sという関数が有ります。逆変換はWideCharToMultiByteが対応していて良く似た関数もwcstombs_sというのがあります。

 

Win32/64_アプリケーション開発に戻る。