I figured out a somewhat convoluted way to convert a CStringW
to a std::string
, but I was wondering if there's a cleaner way than:
CStringW cwstr;
std::wstring stdwstr = cwstr;
std::string stdstr = CW2T(stdwstr.c_str());
I figured out a somewhat convoluted way to convert a CStringW
to a std::string
, but I was wondering if there's a cleaner way than:
CStringW cwstr;
std::wstring stdwstr = cwstr;
std::string stdstr = CW2T(stdwstr.c_str());
You can cut out the intermediate std::wstring
:
CStringW cwstr;
std::string stdstr = CW2A(cwstr);
Also note that you want the CW2A
macro for correctness. CW2T
converts to a TCHAR
string, so the code you posted would only compile for an ANSI build (where TCHAR
is char
).
std::string
has the following constructor:
template<class InputIterator> string (InputIterator begin, InputIterator end);
So you could use it:
CStringW cwstr;
std::string x( &cwstr.GetString()[0], &cwstr.GetString()[cwstr.GetLength()] );
Implicit convertion wchar_t
to char
will take place.