### C++字符串转换详解 #### 一、概述 在C++编程中,字符串转换是非常常见的需求之一,尤其是在处理用户输入、文件操作等场景时。本文将详细介绍几种常见类型的字符串转换方法,包括`CString`, `int`, `string`, `char*`之间的相互转换。 #### 二、CString与int之间的转换 ##### 1. int转CString 可以使用`CString`的`Format`函数来完成转换: ```cpp int i = 64; CString s; s.Format(_T("%d"), i); ``` 这里使用了`_T`宏确保在Unicode编译环境下能够正确处理宽字符。 ##### 2. CString转int 可以使用标准库函数`atoi`或`_wtoi`进行转换: ```cpp CString ss = _T("1212.12"); int temp = _wtoi(ss); // 或者使用 atoi(ss) ``` 注意,在使用`atoi`时需要转换为`const char*`类型。 #### 三、CString与string之间的转换 ##### 1. string转CString 可以通过调用`CString`构造函数或`Format`函数完成转换: ```cpp std::string str = "Hello World"; CString cs; cs.Format(_T("%s"), str.c_str()); ``` 需要注意的是,`c_str()`返回的是一个`const char*`类型,而不是普通的`char*`。 ##### 2. CString转string 可以使用`std::string`的构造函数,通过调用`CString`的`GetBuffer`方法获取字符数组: ```cpp CString cs = _T("Hello MFC"); std::string str(cs.GetBuffer(0)); // 释放缓冲区 cs.ReleaseBuffer(); ``` 这里需要注意的是,使用`GetBuffer`获取的缓冲区需要手动调用`ReleaseBuffer`来释放资源。 #### 四、char*与CString之间的转换 ##### 1. char*转CString 可以使用`CString`的构造函数或`Format`函数完成转换: ```cpp char* charPoint = "Hello C++"; CString cs; cs.Format(_T("%s"), charPoint); ``` ##### 2. CString转char* 可以通过调用`CString`的`GetBuffer`方法获取字符数组: ```cpp CString cs = _T("Hello C++"); char* charPoint = cs.GetBuffer(cs.GetLength()); // 释放缓冲区 cs.ReleaseBuffer(); ``` #### 五、char*与string之间的转换 ##### 1. char*转string 可以直接使用`std::string`的构造函数完成转换: ```cpp char* charPoint = "Hello C++"; std::string str(charPoint); ``` ##### 2. string转char* 可以使用`std::string`的`c_str`方法获取`const char*`,如果需要修改,则需要拷贝一份: ```cpp std::string str = "Hello C++"; char* charPoint = new char[str.size() + 1]; strcpy(charPoint, str.c_str()); ``` #### 六、注意事项 - 在使用`GetBuffer`获取字符串后,一定要记得调用`ReleaseBuffer`来释放资源。 - 使用`c_str()`得到的字符串是只读的,如果需要修改,需要先复制一份。 - 在转换过程中,注意编码问题,例如在多语言环境中可能需要使用`setlocale`设置本地化环境。 #### 七、总结 通过以上介绍,我们可以看到不同数据类型之间进行字符串转换的方法是多种多样的,可以根据具体的需求选择合适的方法。在实际开发过程中,合理运用这些转换技巧可以大大提高代码的可读性和维护性。希望本文能对大家有所帮助!
string 转 CString
CString.format("%s", string.c_str());
char 转 CString
CString.format("%s", char*);
char 转 string
string s(char *);
string 转 char *
char *p = string.c_str();
// CString转std::string
CString str = dlg.GetPathName();
setlocale(LC_ALL, "chs");
char *p = new char[256];
wcstombs( p, str, 256 );
m_fileName = p;
1,string -> CString
CString.format("%s", string.c_str());
用c_str()确实比data()要好.
2,char -> string
string s(char *);
你的只能初始化,在不是初始化的地方最好还是用assign().
3,CString -> string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
- 粉丝: 1
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- welearn刷时长版本v3.0.bat
- 前端分析-2023071100789-y5
- 前端分析-2023071100789
- 调查问卷系统源代码全套技术资料.zip
- 环境监测系统源代码全套技术资料.zip
- SDUT linux期末理论题题库+大题复习资料+7次实验报告
- 前端分析-2023071100789
- 前端分析-2023071100789
- 基于springboot的调查问卷管理系统源代码全套技术资料.zip
- MATLAB代码:计及碳排放交易及多种需求响应的微网 电厂日前优化调度 关键词:碳排放交易 需求响应 空调负荷 电动汽车 微网 电厂优化调度 参考文档:计及电动汽车和需求响应的多类电力市场下