今天写了一个小程序,需要将CString型的数据转成char*,突然发现自己基础这么差,这都不会,没办法,上网找资料吧,才发现有很多人提到这个问题。一些技术大牛提供了以下几种解决办法。
第一种是经过两次强制转换。
CString cstr;
char *p = (LPSTR)(LPCTSTR)cstr;
第二种是经过一次强制转换
。
CString a;
char* b=(char*)a;
第三种是通过WideCharToMultiByte函数实现。
WideCharToMultiByte(CP_ACP,0,m_Edit_Show.GetBuffer(),-1,chr,m_Edit_Show.GetLength(),NULL,NULL);
我亲自都尝试了一下,发现只有第三种合适,第一种只是将CString中的字符串的第一个字符赋值给了char*,所以不能算是成功,第二种想想都不可能,怎么能把对象类型转换成常类型呢,第三种中的WideCharTOMutiByte函数的功能是将该字符串映射到一个多字节字符串中。
当然CString转换成char*之后,将char*再转换成string就简单的多了。
看来一个小小的转换都能花费这么多工夫,有待学习的地方数都数不尽。