[英]How to convert std:string to CString in unicode project
我有一个std::string
。 我需要将此std:string
转换为Cstring
。
我尝试使用.c_str()
但它只用于非unicode项目,我使用unicode项目(因为非unicode项目与VS2013一起被删除)。
任何人都可以展示我如何在unicode项目中将std::string
转换为CString
?
CString
有一个带有const char*
( CStringT::CStringT
)的转换构造const char*
。 将std::string
转换为CString
非常简单:
std::string stdstr("foo");
CString cstr(stdstr.c_str());
这适用于UNICODE和MBCS项目。 如果std::string
包含嵌入的NUL
字符,则必须使用带有length参数的转换构造函数:
std::string stdstr("foo");
stdstr += '\0';
stdstr += "bar";
CString cstr(stdstr.c_str(), stdstr.length());
请注意,转换构造函数隐式使用当前线程的ANSI代码页( CP_THREAD_ACP
)来转换ANSI和UTF-16编码。 如果您不能(或不想)更改线程的ANSI代码页,但仍需要指定用于转换的显式代码页,则必须使用其他解决方案(例如ATL和MFC字符串转换宏 )。
使用ATL转换宏。 当你使用CString时,它们适用于所有情况。 CString是MBCS或Unicode ...取决于您的编译器设置。
std::string str = "string";
CString ss(CA2T(str.c_str());
Unicode CString
的构造函数接受char*
所以你可以这样做:
std::string str = "string";
CString ss(str.c_str());
奖励:如果您经常使用转换,您可以定义一个宏:
#define STDTOCSTRING(s) CString(s.c_str())
所以你的代码更具可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.