建议在MFC中使用Unicode编码。
1. const char*转换成LPCTSTR
可以使用_T()、L、TEXT(); 如 _T(“Hello World”)、L”Hello World”、TEXT(“Hello World”)
2. LPCTSTR、LPTSTR、char*的区别
“T”表示如果定义了UNICODE,那LPCTSTR和LPTSTR表示的就是宽字符,否则就是ANSI;”C”表示const。
MSDN上解释LPTSTR:
#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
根据上面的描述,
如果定义了UNICODE宏,那么LPTSTR = wchar_t*,否则LPTSTR = char*;
如果定义了UNICODE宏,那么LPCTSTR = const wchar_t*,否则LPCTSTR = const char*;
在程序中直接转换:
char* pStr;
(LPTSTR)pStr;
如下是分别在不同编码下的定义:
// UNICODE
typedef wchar_t WCHAR;
typedef WCHAR *PWCHAR;
typedef WCHAR *LPWCH,*PWCH;
typedef CONST WCHAR *LPCWCH,*PCWCH;
typedef WCHAR *NWPSTR;
typedef WCHAR *LPWSTR, *PWSTR;
typedef WCHAR UNALIGNED *LPUWSTR, *PUWSTR;
typedef CONST WCHAR *LPCWSTR, *PCWSTR;
typedef CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR;
// ANSI
typedef CHAR *PCHAR;
typedef CHAR *LPCH, *PCH;
typedef CONST CHAR *LPCCH, *PCCH;
typedef CHAR *NPSTR;
typedef CHAR *LPSTR, *PSTR;
typedef CONST CHAR *LPCSTR, *PCSTR;
#ifdef UNICODE
typedef WCHAR TCHAR, *PTCHAR;
typedef WCAHR TBYTE, *PTBYTE;
typedef LPWSTR LPTCH, PTCH;
typedef LPWSTR PTSTR, LPTSTR;
typedef LPCWSTR PCTSTR, LPCTSTR;
typedef LPUWSTR PUTSTR, LPUTSTR;
typedef LPCUWSTR PCUTSTR, LPCUTSTR;
typedef LPWSTR LP;
#else
typedef char TCHAR, *PTCHAR;
typedef unsigned char TBYTE, *PTBYTE;
typedef LPSTR LPTCH, PTCH;
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
#endif
建议:
1. 使用“中庸”API兼容,如_tcscpy(),可以在UNICODE和ANSI下同时使用;
2.使用TCHAR;
3. CString、string、char*互相转化
unicode下加_T()即可。
-> string、char* 转换为CString
CString.format(“%s”,string.c_str());
CString.format(“%s”,char*);
-> CString 转 string
string str(CString.GetBuffer(CString.GetLength()));
-> CString转char*
strcpy(char*,CString,sizeof(char*));
-> string转char*
char *p = string.c_str();
-> char*转string
string str(char*);
4. CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
-> CString 转 LPCWSTR
LPCWSTR = CString.AllocSysString(); // 方法一
USES_CONVERSION; // 方法二
LPCWSTR = A2CW((LPCSTR)CString); // MFC中CString与LPSTR可以通用
-> LPCWSTR 转CString
CString str(LPCWSTR);
-> CString 转 LPWSTR
LPWSTR = (LPWSTR)(LPCWSTR)str;
-> CString 转 LPSTR
LPSTR = CString.GetBuffer(); // 方法一
CString.ReleaseBuffer();
LPSTR = (LPSTR)(LPCSTR)CString; // 方法二
-> LPSTR转CString
CString str(LPSTR);
-> LPCSTR与CString
LPCSTR = (LPCSTR)CString; // 可以直接转换
参考链接:MFC中的乱起八糟—-字符编码:LPTSTR,LPCTSTR, TCHAR等 – 夏天/isummer – 博客园
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/46193.html