15

我有一个std::string. 我需要将其转换std:stringCstring.

我尝试使用,.c_str()但它仅用于非 unicode 项目,我使用 unicode 项目(因为非 unicode 项目已被 VS2013 弃用)。

任何人都可以向我展示如何将一个转换std::stringCStringunicode 项目?

4

4 回答 4

40

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 字符串转换宏)。

于 2013-10-27T22:04:16.210 回答
3

UnicodeCString的构造函数接受char*,所以你可以这样做:

std::string str = "string";
CString ss(str.c_str());
于 2013-10-28T12:25:40.363 回答
2

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

std::string str = "string";
CString ss(CA2T(str.c_str());
于 2013-10-27T14:53:10.950 回答
-1

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

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

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

于 2016-01-27T10:13:35.750 回答