CString 非常方便,而 std::string 更兼容 STL 容器。我正在使用 hash_map 。但是, hash_map 不支持 CString s 作为键,所以我想将 CString 转换为 std::string
编写一个 CString 哈希函数似乎需要很多时间。

CString -----> std::string
我怎样才能做到这一点?
std::string -----> CString:

inline CString toCString(std::string const& str)
{
    return CString(str.c_str());
}
我对吗?

编辑:
这里有更多问题:
如何从 wstring 转换为 CString,反之亦然?
// wstring -> CString
std::wstring src;
CString result(src.c_str());

// CString -> wstring
CString src;
std::wstring des(src.GetString());
这有什么问题吗?
另外,如何从 std::wstring 转换为 std::string,反之亦然?

最佳答案

根据 CodeGuru :
CStringstd::string :

CString cs("Hello");
std::string s((LPCTSTR)cs);

但是: std::string 不能总是从 LPCTSTR 构造。即代码对于 UNICODE 构建将失败。

由于 std::string 只能从 LPSTR/LPCSTR 构造,因此使用 VC++ 7.x 或更高版本的程序员可以使用 0x251812431 等转换类作为交互媒体。
CString cs ("Hello");
// Convert a TCHAR string to a LPCSTR
CT2CA pszConvertedAnsiString (cs);
// construct a std::string using the LPCSTR input
std::string strStd (pszConvertedAnsiString);

CT2CA to std::string : (来自 Visual Studio's CString FAQs... )
std::string s("Hello");
CString cs(s.c_str());
CString 可以从字符或宽字符串构造。即它可以从 CStringT (即 char* ) 或从 LPSTR ( wchar_t* ) 转换。

换句话说,炭特化(的LPWSTR),即CStringTCStringA -specilization wchar_t,和CStringW -specialization TCHAR可以从CString或宽字符,空终止(空终止在这里非常重要的)字符串源来构建。
尽管 IInspectable 修改了“空终止”部分 in the comments :

关于c++ - 你如何将 CString 和 std::string std::wstring 相互转换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/258050/

10-13 06:50