CString 转换成string ---涉及UNICODDE

本文介绍了在C++中如何将CString类型转换为string类型的方法,包括Unicode和非Unicode环境下的多种转换技巧。

http://blog.163.com/ctct7833@126/blog/static/16162469020125113499251/

CString 转换成string


------解决方案--------------------------------------------------------
unicode:
CString sz1 = L"abc";
std::string sz2 = CT2A(sz1.GetBuffer()); //转化为非unicode.

非unicode:
CString sz1 = "abc";
std::string sz2 = sz1.GetBuffer();  

------解决方案--------------------------------------------------------
楼上正解,再提供几个UNICODE下的方法

C/C++ code
//方法一 CString theCStr; std::string STDStr( CW2A( theCStr.GetString() ) ); //方法二 CString m_Name; CT2CA pszName(m_Name); std::string m_NameStd(pszName); //方法三 CString str = L"Test"; std::wstring ws(str); std::string s;  s.assign(ws.begin(), ws.end());

在 MFC 开发中,`CString` 是一个常用的字符串类,而 `std::string` 是 C++ 标准库中提供的字符串类,具有更丰富的操作功能。在某些场景下,需要将 `CString` 转换为 `std::string`,以便兼容标准库接口或跨平台开发。 ### 使用 `CT2A` 转换 `CString` 为 `std::string` 在 Unicode 环境下,`CString` 实际上是 `CStringW` 类型,存储的是宽字符(`wchar_t`),而 `std::string` 是基于 `char` 的字符串。因此,需要进行编码转换。可以使用 MFC 提供的转换宏 `CT2A`(Convert TCHAR to ANSI),将宽字符转换为多字节字符。 示例如下: ```cpp CString cstr = _T("Hello, MFC!"); std::string stdstr(CT2A(cstr)); ``` 该方式适用于 Unicode 和多字节字符集(MBCS)环境,`CT2A` 会根据当前项目设置自动处理转换逻辑[^4]。 ### 使用 `CString::GetString()` 和 `std::string` 构造函数 对于 MFC 中的 `CStringA`(即 ANSI 字符串),可以直接使用 `GetString()` 方法获取 `LPCSTR` 指针,并构造 `std::string` 对象: ```cpp CStringA cstrA("Hello, ANSI!"); std::string stdstr(cstrA.GetString()); ``` 而对于 `CStringW`(Unicode 字符串),需要先转换为 `CStringA` 或使用 `CW2A` 宏进行转换: ```cpp CStringW cstrW(L"Hello, Unicode!"); std::string stdstr(CW2A(cstrW.m_pszData)); ``` 该方法通过 `CW2A` 将宽字符转换为 ANSI 字符,并构造 `std::string` 对象[^1]。 ### 使用 `std::string` 构造函数结合 `CString` 的字符长度 还可以通过手动指定长度的方式构造 `std::string`: ```cpp CString cstr = _T("Hello, CString!"); int len = cstr.GetLength(); std::string stdstr; stdstr.assign(cstr, len); ``` 此方式适用于 `CStringA`,在 Unicode 环境下需要先进行字符转换[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值