如何在unicode项目中将std:string转换为CString

时间:2013-10-27 10:04:24

标签: c++ string visual-studio mfc

我有std::string。 我需要将此std:string转换为Cstring

我尝试使用.c_str(),但它仅用于非unicode项目,并且我使用unicode项目(因为非unicode项目与VS2013一起被删除)。

任何人都可以告诉我如何在unicode项目中将std::string转换为CString

4 个答案:

答案 0 :(得分:30)

CString有一个转换构造函数,其中包含const char*CStringT::CStringT)。将std::string转换为CString非常简单:

std::string stdstr("foo");
CString cstr(stdstr.c_str());

这适用于UNICODE和MBCS项目。如果您的std::string包含嵌入的NUL个字符,则必须使用带有长度参数的转换构造函数:

std::string stdstr("foo");
stdstr += '\0';
stdstr += "bar";
CString cstr(stdstr.c_str(), stdstr.length());

请注意,转换构造函数隐式使用当前线程(CP_THREAD_ACP)的ANSI代码页来转换ANSI和UTF-16编码。如果您不能(或不想)更改线程的ANSI代码页,但仍需要指定用于转换的显式代码页,则必须使用其他解决方案(例如ATL and MFC String Conversion Macros)。

答案 1 :(得分:1)

使用ATL转换宏。当你使用CString时,它们适用于所有情况。 CString是MBCS或Unicode ...取决于您的编译器设置。

std::string str = "string";
CString ss(CA2T(str.c_str());

答案 2 :(得分:1)

Unicode CString的构造函数接受char*,因此您可以执行此操作:

std::string str = "string";
CString ss(str.c_str());

答案 3 :(得分:0)

奖励:如果经常使用转化,您可以定义一个宏:

#define STDTOCSTRING(s) CString(s.c_str())

所以你的代码更具可读性。