我有std::string
。
我需要将此std:string
转换为Cstring
。
我尝试使用.c_str()
,但它仅用于非unicode项目,并且我使用unicode项目(因为非unicode项目与VS2013一起被删除)。
任何人都可以告诉我如何在unicode项目中将std::string
转换为CString
?
答案 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())
所以你的代码更具可读性。