c – 如何转换CString和:: std :: string :: std :: wstring彼此?

CString是相当方便,而std :: string更容易与STL容器兼容。
我使用hash_map。但是,hash_map不支持CString作为键,所以我想将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

CString to std :: string:

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

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

由于std :: string只能从LPSTR / LPCSTR构造,一个使用VC 7.x或更好的程序员可以利用转换类,如CT2CA作为中介。

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);

std::string to CString:(从Visual Studio’s CString FAQs…)

std::string s("Hello");
CString cs(s.c_str());

CStringT可以从字符或宽字符字符串构造。即它可以从char *(即LPSTR)或从wchar_t *(LPWSTR)转换。

换句话说,(CStringT的)字符特化,即CStringA,wchar_t指定CStringW和TCHAR特殊化CString可以从字符或宽字符,空终止(空终止在这里非常重要)字符串源来构造。
Althoug IInspectable修正了“零终止”部分in the comments

NUL-termination is not required.
CStringT has conversion constructors that take an explicit length argument. This also means that you can construct CStringT objects from std::string objects with embedded NUL characters.

http://stackoverflow.com/questions/258050/how-to-convert-cstring-and-stdstring-stdwstring-to-each-other

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 如何转换CString和:: std :: string :: std :: wstring彼此?