タイトルにあるように、PWCHARをstd::stringに変換する方法が必要です。私がオンラインで見つけることができる唯一の解決策は反対の変換のためです、それで誰かがこれにいくらかの光を当てることができれば私は本当にそれが欲しいです。ありがとう!
これはC++です。
std::wstring
はワイド文字の文字列クラスでもあるため、を使用する方がはるかに簡単です。を本当に使用してstd::string
、2バイト文字から1バイト文字またはマルチバイト文字に変換する場合は、その変換を行う関数を使用する必要があります。wcstombs()は、これを行うためのANSIC関数です。プラットフォームが代替手段を提供する場合があります。
このMSDNページによると、PWCHAR
は次のように宣言されています。
typedef wchar_t WCHAR, *PWCHAR;
必要なのはstd::wstring
、で宣言されていstring
ます。
const PWCHAR pwc;
std::wstring str(pwc);
std::wstring
どちらも;std::string
の専門分野であるため、と非常によく似ています。std::basic_string
違いは、(Windows )をwstring
使用するのに対し、を使用することです。wchar_t
WCHAR
string
char
本当にstring
(ではなく)が必要な場合は、ここwstring
に示すようにC++を使用することをお勧めしuse_facet
ます。
const std::locale locale("C");
const std::wstring src = ...;
const std::string dst = ...;
std::use_facet<std::ctype<wchar_t> >(loc)
.narrow(src.c_str(), src.c_str() + src.size(), '?', &*dst.begin());
個別にマルチバイトC文字列に変換し、これを使用してを作成することもできますstd::string
。ただし、これはC++でこれを行うための推奨される方法ではありません。これを行うための関数はwcstombs
、以下のように宣言されています。
size_t wcstombs ( char * mbstr, const wchar_t * wcstr, size_t max );
WideCharToMultiByte
Windowsを使用しているため、この手順にも使用できます。
int WideCharToMultiByte(
__in UINT CodePage,
__in DWORD dwFlags,
__in LPCWSTR lpWideCharStr,
__in int cchWideChar,
__out_opt LPSTR lpMultiByteStr,
__in int cbMultiByte,
__in_opt LPCSTR lpDefaultChar,
__out_opt LPBOOL lpUsedDefaultChar
);
LPSTR
MSDNによると次のように定義されています。
typedef CHAR *LPSTR;
typedef char CHAR;