【该方法本人实践成功(推荐)】Cstring 和 const char* , unicode和ANSI编码 的一个具体应用
2013-03-22 10:08
537 查看
参考文章如下:
l 网上流传甚广的一个大牛写的“关于CString的技巧”,没能找到原文,转载地址如下:http://blog.csdn.net/coolstar14/archive/2004/07/15/41885.aspxl CodeProject上一篇“CString Managment”地址: http://www.codeproject.com/KB/string/cstringmgmt.aspx
l CodeProject上的FAQ里的一些解答:http://www.codeproject.com/KB/cpp/cppforumfaq.aspx#mfc_cstrtopchar
l MSDN里关于WideCharToMultiByte()函数的说明及例子。
背景:
1. Unicode环境2. CSmtp类是从网上下载的一个类,实现了利用smtp协议发送邮件。具有很多方法,可以设置帐户名、密码等,对应的方法为CSmtp::SetLogin(const char*)、CSmtp::SetPassword(const char*)等。因为是别人的作品,我并无能力改写这些函数的参数类型。
问题
1. CString——>const char*:将Edit控件里用户输入的字符串,保存到Cstring类型的控件变量里。经过处理,然后将此字符串作为函数m_CSmtpMail.SetLogin(constchar*)的参数输入。
2. const char*——>LPCTSTR:将捕捉异常函数e.GetErrorText().c_str()的结果转换为LPCTSTR,作为MessageBox(LPCTSTR)函数的参数。
解决:
对于第一个问题:1:先将Cstring变量转换为Unicode 的字符指针,即TCHAR*
2:再利用WideCharToMultiByte()函数将unicode字符串转换为ANSI字符串
3. 将转换后的结果字符串传递给SetLogin(const char*)函数,MFC根据参数类型要求,自动将char * 转换成const char*
代码如下:
1
//m_EditAccount为控件变量
2
//m_CSmtpMail为CSmtp对象
3
TCHAR* tempAct = m_EditAccount.GetBuffer();
4
char mbTempAct[256];
5
WideCharToMultiByte(0,0,tempAct,-1,mbTempAct,100,Null,Null);
6
m_CSmtpMail.SetLogin(mbtempAct);
对于第二个问题:
1. e.GetErrorText().c_str()的结果实际上是一个字符数组的首地址指针,一个const char*类型。利用Cstring的构造函数,可以很容易的将一个字符指针转换为Cstring类型。
2.将Cstring类型传递给MessageBox()。MFC根据参数类型要求,利用LPCTSTR操作符,自动将Cstring转换为LPCTSTR类型。LPCTSTR与CString的转换就是这么简单,这一点在很多讲解的Cstring的文章里都可以找到。
3.相比第一个问题,这里少掉了ANSI编码到unicode编码相互转换的过程。这应该是Cstring类封装完善的缘故,在构造函数Cstring str4(e.GetErrorText().c_str())这一步自动完成了。
代码如下:
1
Cstring cstr4(e.GetErrorText().c_str());
2
MessageBox(cstr4);
相关文章推荐
- CString 和 const char* , unicode和ANSI编码 的一个具体应用
- Cstring 和 const char* , unicode和ANSI编码 的一个具体应用(转)
- UNICODE 工程下 CSTRING 转 CONST CHAR* 的最简便方法 VS2005 VS2008
- VS 2008 中 UNICODE 工程下 CSTRING 转 CONST CHAR* 的最简便方法
- Unicode下CString转成const char*的一种简单方法
- 如何用Apache分发同一个服务器上的多个应用[本人亲自实践]
- 推荐一个生成app应用图标的方法
- UNICODE下宽字符的CString转换为const char *
- CString, const char*,string与Unicode,multi-byte字符集转换
- 评分模型的检验方法和标准通常有:K-S指标、交换曲线、AR值、Gini数等。例如,K-S指标是用来衡量验证结果是否优于期望值,具体标准为:如果K-S大于40%,模型具有较好的预测功能,发展的模型具有成功的应用价值。K-S值越大,表示评分模型能够将“好客户”、“坏客户”区分开来的程度越大。
- UNICODE下宽字符的CString转换为const char *
- UniCode 下 CString 转 char* 的方法
- UniCode 下 CString 转 char* 的方法
- Unicode环境下宽字符CString与ANSI字符const char* 的转换
- UniCode 下 CString 转 char* 的方法
- CString 与 char * 和 const char*的转换,以及在Unicode项目中的使用.
- UniCode 下 CString 转 char* 的方法
- 敏捷个人:通过实践TOGAF来思考如何学习并应用新的方法? 推荐
- 得到一个Unicode串时,可以用下列几种方法之一将它转换成char类型串
- CString 转化为 const char*的方法(经验证) “0x77d287f1”指令引用的“0x00000000”内存。该内存不能为“written”。