ANSI编码的字符集是多字符集,也就是每个字符的编码宽度不相等。
UNICODE编码的字符集是宽字符集,每个字符的编码都是两个字符。
有些操作系统仅支持多字符集,有些操作系统仅支持宽字符集,当然更多的操作系统是两种字符集都支持。为了兼容两种字符集,vs编译器为使用宏定义的方法来选择编译成多字符集还是宽字符集,下面分别介绍:
1.多字符集(ANSI)
字符型是char const char*型是LPCSTR
对应的一些字符串相关函数:MessageBoxA(),strcpy(),strcat(),strlen() (注:以str开头)
2.宽字符集(UNICODE)
字符型是wchar_t const char*型是LPCWSTR
对应的一些字符串相关函数:MessageBox(),wcscpy(),wcscat(),wcslen(); (注:以wcs开头)
3.兼容字符集
兼容字符集要包含头文件<tchar.h>
字符型是TCHAR
如果是多字符型编译,就把宏展开成char;如果是宽字符集编译,就把宏展开成wchar_。
对于const char*要放在_T()宏定义中。比如:_T("Hello World!")。
那么如果选择了多字符编译,就把宏展开成"Hello World!";如果是宽字符编译,就把宏展开成L"Hello World!"
对应的一些字符集相关函数:MessageBox(),
_tcscpy(),_tcscat(),_tcslen() (注:以_tcs开头,是C运行时库)
或者lstrcpy(),lstrcat(),lstrlen() (注:以lstr开头,是Windows函数)。
兼容字符集的宏定义在头文件<tchar.h>中,部分代码如下所示:
#ifdef __UNICODE
#define _tcslen wcslen
#define TCHAR wchar_t
#define LPTSTR wchar_t*
#define _T(x) L##x
#else
#define _tcslen strlen
#define TCHAR char
#define LPTSTR char*
#dfine _T(x) x
#endif