我想出了一个有点令人费解的方式来一个CStringW
转换为std::string
,但我不知道是否有比一个更清洁的方式:清洁的方式来从CStringW转换为std :: string?
CStringW cwstr;
std::wstring stdwstr = cwstr;
std::string stdstr = CW2T(stdwstr.c_str());
我想出了一个有点令人费解的方式来一个CStringW
转换为std::string
,但我不知道是否有比一个更清洁的方式:清洁的方式来从CStringW转换为std :: string?
CStringW cwstr;
std::wstring stdwstr = cwstr;
std::string stdstr = CW2T(stdwstr.c_str());
你可以切出中间std::wstring
:
CStringW cwstr;
std::string stdstr = CW2A(cwstr);
另请注意,您需要CW2A
宏以保证正确性。 CW2T
转换为字符串TCHAR
,让你发布的代码只编译的ANSI构建(其中TCHAR
是char
)。
std::string
具有下面的构造:
template<class InputIterator> string (InputIterator begin, InputIterator end);
所以,你可以使用它:
CStringW cwstr;
std::string x(&cwstr.GetString()[0], &cwstr.GetString()[cwstr.GetLength()]);
隐皈依wchar_t
到char
会发生。
在这之前你需要'&'吗? – GManNickG 2010-07-22 18:35:17
yes.surely.yes。 – 2010-07-22 18:42:22
您的解决方案给了我:'错误C2102:'&'要求l值'(现在没有&符号的测试) – 2010-07-22 18:59:11
std::string str = CStringA(cwstr);
工作完成。
为什么把这个标记为社区维基? – 2010-07-22 19:23:02