当前位置:  开发笔记 > 编程语言 > 正文

如何将CString和:: std :: string :: std :: wstring互相转换?

如何解决《如何将CString和::std::string::std::wstring互相转换?》经验,为你挑选了3个好方法。

CString非常方便,同时std::string与STL容器更兼容.我在用hash_map.但是,hash_map不支持CString作为键,所以我想转换CStringstd::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彼此?



1> VonC..:

根据CodeGuru:

CStringstd::string:

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

但是: 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::stringtoCString :(来自Visual Studio的CString常见问题解答......)

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

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

换句话说,炭专业化(的CStringT),即CStringA,wchar_t-specilization CStringWTCHAR-specialization CString可以从任一构造char或宽字符,null终止(null终止在这里非常重要)字符串来源.
Althoug IInspectable修订了"空终止"部分中的评论:

不需要NUL终止.
CStringT具有采用显式长度参数的转换构造函数.这也意味着您可以CStringTstd::string具有嵌入NUL字符的对象构造对象.


呃...欢迎你:)感谢Siddhartha Rao的详细解释.

2> OJ...:

通过使用std::basic_string而不是std::string你的角色解决它,它应该工作正常,无论你的角色设置.


为了方便和熟悉,我喜欢键入dede:`typedef std :: basic_string tstring`
这种方法更简单

3> Sal..:

转换CStringstd::string使用指定长度的转换更有效.

CString someStr("Hello how are you");
std::string std(somStr, someStr.GetLength());

在紧密循环中,这可以显着提高性能.


我使用此错误:`无法将参数1从'CString'转换为'const std :: basic_string <_Elem,_Traits,_Alloc>&'
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有