CString是windows的字符串,有时候它的转换让人咬牙切齿,很多MFC的接口都涉及到字符串的转换,更可恨的是还涉及到字节编码的转换,所有两者导致转换很多种情况,新手可能今天转换成功,下次同样的方法却转换不成功,而许多MFC接口是字符串输入不对很难输出正确的结果的。
Unicode下CString转换为char *
CString转换成char*有很多种方法,以下是三种常见的
但是这个只局限于宽字节Unicode的情况,在窄字节和多字节的情况下不行的,所以一般情况下还涉及多字节编码转换,这就是比较头疼的问题。一般情况下,Unicode转为多字节可以用以下方法
聪明的你会发现,这里面涉及到内存的拷贝,以及字符串长度的计算,特别的在最后一个字符要赋值为0.这才是成功的。所以可以总结为以下步骤
当然也有更快更简便的方法,那就是使用T2A,W2A,这两个简洁的函数简直就是神器,可以轻松的帮你完成你想要的功能。
Unicode下char *转换为CString
这个转换就是一个逆转换,同样涉及到字节长度的计算
当然windows也封装了同样的接口
还有我们更频繁使用的宏
看起来还是比较复杂的。
一般情况下,windows开发工程师要保持对字符串转换和字节编码的敏感性,大部分的mfc windows api都是要求比较多,在qt下编程也如是,只是在QT下面给了更多转换的接口。
LPWSTR、LPCSTR、LPCWSTR这三个你肯定不陌生吧。
LPCSTR是Win32和VC++所使用的一种字符串数据类型。LPCSTR被定义成是一个指向以'\0'结尾的常量字符的指针。
LPWSTR是wchar_t字符串
LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型。
LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘\0’)结尾的32位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的64位双字节字符数组指针。这些都很迷,如果没有一定的经验,多做几次转换,是很难孰能生巧,饶是我编程多年,一碰到总要百度一下。
当然啦,如果你嫌麻烦,只要记住那几个三个字母的函数就可以啦,T2A,W2A,T2A,T2W.