我有一个std::string
. 我需要将其转换std:string
为Cstring
.
我尝试使用,.c_str()
但它仅用于非 unicode 项目,我使用 unicode 项目(因为非 unicode 项目已被 VS2013 弃用)。
任何人都可以向我展示如何将一个转换std::string
为CString
unicode 项目?
我有一个std::string
. 我需要将其转换std:string
为Cstring
.
我尝试使用,.c_str()
但它仅用于非 unicode 项目,我使用 unicode 项目(因为非 unicode 项目已被 VS2013 弃用)。
任何人都可以向我展示如何将一个转换std::string
为CString
unicode 项目?
CString
有一个采用const char*
( CStringT::CStringT
) 的转换构造函数。将 a 转换std::string
为 aCString
非常简单:
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 和 MFC 字符串转换宏)。
UnicodeCString
的构造函数接受char*
,所以你可以这样做:
std::string str = "string";
CString ss(str.c_str());
使用 ATL 转换宏。当您使用 CString 时,它们适用于任何情况。CString 是 MBCS 或 Unicode...取决于您的编译器设置。
std::string str = "string";
CString ss(CA2T(str.c_str());
奖励:如果您经常使用转换,您可以定义一个宏:
#define STDTOCSTRING(s) CString(s.c_str())
所以你的代码更具可读性。