Win32/64技術 003 ワイド文字列→マルチバイト文字列変換
2023年10月31日 (火) 23:26時点におけるYo-net (トーク | 投稿記録)による版 (ページの作成:「Win32/64_アプリケーション開発に戻る。 == '''概要''' == ワイド文字のUTF-16から変換してマルチバイトのSJIS(Shift_JIS、Microsoft提唱のコードページcp932とも呼ばれる)やUTF-8に変換する方法です。MultiByteToWideChar関数にあい対する関数WideCharToMultiByteを使います。 <syntaxhighlight lang="cpp"> wchar_t pwchstr[] = L"Win32/64アプ…」)
概要
ワイド文字のUTF-16から変換してマルチバイトのSJIS(Shift_JIS、Microsoft提唱のコードページcp932とも呼ばれる)やUTF-8に変換する方法です。MultiByteToWideChar関数にあい対する関数WideCharToMultiByteを使います。
wchar_t pwchstr[] = L"Win32/64アプリケーション";
int icharLen = WideCharToMultiByte(932, 0, pwchstr, -1, nullptr, 0, nullptr, nullptr);
char* chstr = new char[icharLen];
WideCharToMultiByte(932, 0, pwchstr, -1, chstr, icharLen, nullptr, nullptr);
標準string型 wstring型を使う場合(推奨)
wchar_t pwchstr[] = L"Win32/64アプリケーション";
std::wstring wstringUTF16str = std::wstring(pwchstr);
int icharLen = WideCharToMultiByte(932, 0, wstringUTF16str.c_str(), -1, nullptr, 0, nullptr, nullptr);
std::string stringSJISstr(icharLen, 0);
WideCharToMultiByte(932, 0, wstringUTF16str.c_str(), -1, stringSJISstr.c_str(), stringSJISstr.size(), nullptr, nullptr);