一、类型比较
| 类型 | 多字节 | (ANSI)定义 | 宽字节 | (UNICODE)定义 | 通用类型 |
|---|---|---|---|---|---|
| 字符 | char | - | wchar_t | typedef unsigned short wchar_t | TCHAR |
| 字符 | CHAR | typedef char CHAR | WCHAR | typedef wchar_t WCHAR | TCHAR |
| 字符串指针 | LPSTR | typedef CHAR* LPSTR | LPWSTR | typedef WCHAR* LPWSTR | LPTSTR |
| 字符串常量 | LPCSTR | typedef const CHAR* LPCSTR | LPCWSTR | typedef const WCHAR* LPCWSTR | LPCTSTR |
常用字符串类:std::string、CString(MFC类)
1.1 增强程序通用性
- 使用通用类型(会根据工程字符集自动选择合适的类型表示)
- 表示字符串常量,不能简单使用双引号(代表ascii字符);也不能在前面加L(代表unicode);使用_T(“”)
- TCHAR FF[50]。FF能装多少字符?不要习惯性的sizeof(FF)了,应该_countof(FF)或者sizeof(FF)/sizeof(TCHAR)。因为我们不确定TCHAR到底是char 还是 wchar_t
- 不能再使用以前的字符串处理函数或者字符处理函数了。比如strlen、strcat、strcmp等,因为这些是ascii专用的,通通改成使用T家族的吧。前缀都换成_tcs。比如_tcslen、_tcscat、_tcscmp等等
- sprintf,今后就改成_stprint()
- IsTextUnicode函数方法判断某个字符串是不是unicode字符串
- 绝大多数情况下应该使用TCHAR,但是记住GetProcAdress这个特殊的函数吧,它的参数只能是char*。因为在导出函数表里函数名是用ascii码写的
1.2 通用字符串格式化方法
TCHAR szChar[20];
_stprintf_s(szChar,_T("char code is %d"),wParam);
MessageBox(hwnd,szChar,_T("char"),0);