在使用vs编写MFC程序的时候,工程属性经常会让你选择编码方式,一般默认为Unicoude编码,当然也可以选择多字节字符集编码,因此我们就有必要讨论其区别:
1. ASCII码表: 用7位表示,因此只能表示128个字符【26个小写字母、26个大写字母、10个数字、32个符号、33个句柄和一个空格】,扩展的ASCII码表用 8位表示,可以表示256个字符。【包括某些带重音的字符和一个小写希腊字母表,还包括一些 块型和线状图形字符】
双字节字符集(DBCS):问题在于有的字符是一个字节表示(如ASCII码表中字符),有的由双字节表示。----也就是ANSI字符集
Unicode字符集: 使用宽字符集,每个字符都由两个字节表示,范围0~65536,能够表示更多的字符。
2. 关于TCHAR:
如果定义了_UNICODE标识符,那么TCHAR就是wchar_t:typedef wchar_t TCHAR ;
否则,TCHAR就是Char:typedef char TCHAR ;
3.关于CHAR和WCHAR
typedef char CHAR ; //一个8位的char
typedef wchar_t WCHAR ; // wc 一个16位的wchar_t
4.关于_T:
如果定义了_UNICODE标识符,那么一个称作_T的宏就定义如下:
#define _T(x) L##x //也就是L“aaa”,用于Unicode编码
如果没有定义_UNICODE标识符,则_T宏只简单地定义如下:
#define _T(x) x
5.关于指针
(1)WINNT.H表头文件定义了8位字符串指针的六种数据型态和四个可用做const 8位字符串指针的数据型态:
typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;
typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;
(2)WINNT.H定义了六种可作为16位字符串指针的数据型态和四种可作为const 16位字符串指针的数据型态:
typedef WCHAR * PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;
typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, * PCWSTR ;
6.字符串操作函数
如果定义了名为_UNICODE的标识符,并且程序中包含了TCHAR.H表头文件,那么_tcslen就定义为wcslen:
#define _tcslen wcslen
如果没有定义UNICODE,则_tcslen定义为strlen:
#define _tcslen strlen
7.关于MessageBox
如果定义了_UNICODE标识符,#define MessageBox MessageBoxW
如果没有定义_UNICODE标识符,#define MessageBox MessageBoxA
还有很多不完善也不了解的地方,比如字符串函数的具体操作等等,用到了再从网上寻找吧。