在实验室做项目,中间遇到很多次这种字符转换的问题。一直都是简单看看,也没有认真分析过问题的原因,直到上次一直弄不出来,这里就仔细整理了一下,希望大家可以参考一下。VS2010环境下默认使用UNICODE编码,即常用_T()宏进行格式转换。在这种情况下,CString使用宽字符编码,宽字符编码对应于窄字符编码。例如中文,中文和英文不同,一个汉字使用两个字节表示,则使用宽字符编码。而英文仅需一个字节即可,故可以用窄字符编码,同样也可使用宽字符编码。
在进行各种字符格式转换时,大家发现有时候网上的方法不好用,原因就是在于不同项目使用的字符编码不同。例如VC6.0使用的ASCII编码,不需用_T()。
这里收集整理了常用的字符串格式,包括CString,string,char*,char[]进行相互转换的方法。希望大家共同学习进步。UNICODE下转换在VS2010下测试完成,保证完全可运行无误!
(一)UNICODE编码下转换方式,默认使用测试字符串均为中文(英文的情况下很容易解决,最直接按位复制即可)
(1)CString与string转换方法
//CString转string CString str = _T("你好"); CStringA strA(str.GetBuffer(0)); string strTemp = strA.GetBuffer(0); strA.ReleaseBuffer(); //string转CString CString strNew(strTemp.c_str());