2010-07-22 38 views
1

我想出了一个有点令人费解的方式来一个CStringW转换为std::string,但我不知道是否有比一个更清洁的方式:清洁的方式来从CStringW转换为std :: string?

CStringW cwstr; 
std::wstring stdwstr = cwstr; 
std::string stdstr = CW2T(stdwstr.c_str()); 
+0

为什么把这个标记为社区维基? – 2010-07-22 19:23:02

回答

6

你可以切出中间std::wstring

CStringW cwstr; 
std::string stdstr = CW2A(cwstr); 

另请注意,您需要CW2A宏以保证正确性。 CW2T转换为字符串TCHAR,让你发布的代码只编译的ANSI构建(其中TCHARchar)。

1

std::string具有下面的构造:

template<class InputIterator> string (InputIterator begin, InputIterator end); 

所以,你可以使用它:

CStringW cwstr; 
std::string x(&cwstr.GetString()[0], &cwstr.GetString()[cwstr.GetLength()]); 

隐皈依wchar_tchar会发生。

+0

在这之前你需要'&'吗? – GManNickG 2010-07-22 18:35:17

+0

yes.surely.yes。 – 2010-07-22 18:42:22

+0

您的解决方案给了我:'错误C2102:'&'要求l值'(现在没有&符号的测试) – 2010-07-22 18:59:11

2
std::string str = CStringA(cwstr); 

工作完成。

相关问题