VC++中的字符串用起来着实让人难受,LPTSTR、LPCTSTR、LPCSTR、LPCWSTR、LPSTR、WCHAR、CString、_T()和L彼此之间的互相转换更是头痛。根据使用经验和MSDN Libary文档总结出如下:
1.CString类型字符串
CString位于头文件afx.h中,是MFC中的一种字符串类型的类。此处解释CString与LPSTR、LPCSTR相互转换问题。
注:typedef char CHAR; typedef CHAR* LPSTR; typedef CONST CHAR * LPCSTR;
1.1 LPSTR转换成CString
LPSTR lpStr = “TestString”;
CString str(lpStr);
1.2 CString 转换成 LPSTR
方法一:
CString strName("TestString");
LPSTR lpStr = strName.GetBuffer();
strName.ReleaseBuffer();
方法二:
CString strName("TestString");
LPSTR lpStr = (LPSTR)(LPCSTR) strName;
2. LPSTR、LPCSTR、LPWSTR、LPCWSTR、LPTSTR、LPCTSTR详解
首先要补充两个宏的解释:UNICODE和MBCS
MBCS宏对应的字符串指针是char *也就是LPSTR:typedef char * LPSTR
UNICODE宏对应的指针是unsigned·short * 也就是LPWSTR: typedef unsigned·short* LPWSTR
MBCS:
它是多字节字符集,它是不定长表示世界文字的编码。MBCS表示英文字母时就和ASCII一样(这也是我们容易把MBCS和ASCII搞混的原因), 但表示其他文字时就需要用多字节。
UNICODE:
它是用两个字节表示一个字符的方法。比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节。UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义。
WINDOWS下面的程序设计可以支持MBCS和UNICODE两种编码的字符串,具体用那种就看你定义了MBCS宏还是 UNICODE宏。LPTSTR、LPCSTR、LPCTSTR、LPSTR的意义:
LPSTR:32bit指针 指向一个字符串,每个字符占1字节;
LPCSTR:32-bit指针 指向一个常字符串,每个字符占1字节;
LPCTSTR:32-bit指针 指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义;
LPTSTR:32-bit指针 每字符可能占1字节或2字节,取决于Unicode是否定义。
LPSTR
一个指向以’