Unicode字符:
一般情况下,每个Unicode字符都是用UTF-16编码,UTF的全称是Unicode Transformation Format(Unicode转换形式),UTF
将每个字符编码为2个字节(或者说是16位,一个字节占8位).
目前在Windows操作系统编程中,主要是使用的Unicode字符,为什么要用Unicode字符呢,我的认为最重要的几点是:
1.Windows内部的一切工作都是使用Unicode字符和Unicode字符串来进行的.所以加入我们坚持传入ANSI字符或者是ANSI字符串,
Windows就会被迫分配内存,并将ANSI字符或字符串转换为等价的Unicode形式.所以,Unicode提升了应用程序的效率.占用内存更
少.
2.使用Unicode,应用程序的代码很容易与COM集成(后者要求使用Unicode字符和Unicode字符串).
声明ANSI字符和Unicode字符的区别:
1.ANSI:
//8位字符
char c = 'A';
//字符串
char szBuffer[100] = "A String";
2.Unicode:
//16位字符
wchar_t c =L 'A';
//字符串
wchar_t szBuffer[100] = L "A String";
字符串之前的大写字母 “L” 通知编译器该字符串应当编译为一个Unicode字符串.
以下是Windows开发团队自己定义的数据类型,在WinNT.h头文件中:
//8位
typedef char CHAR;
typedef CHAR *PCHAR;
typedef CHAR *PSTR;
typedef CONST CHAR *PCSTR
//16位
typedef wchar_t WCHAR;
typedef WCHAR *PWCHAR;
typedef WCHAR *PWSTR;
typedef CONST WCHAR *PCWSTR;
以及
typedef _nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;
前缀_nullterminated是一个头部注解,它描述了一个类型如何用作函数的参数和返回值.
在写代码的时候,可以使用ANSI和Unicode字符/字符串使其能通过编译:
#ifdef Unicode
typedef WCHAR TCHAR, *PTCHAR, PTSTR;
typedef CONST WCHAR *PCTSTR;
#define __TEXT(quote) quote
#define __TEXT(quote) ##quote
#else
typedef CHAR TCHAR, *PTCHAR, PTSTR;
typedef CONST CHAR *PCTSTR;
#define __TEXT(quote) quote
#endif
#define TEXT(quote) __TEXT(quote)
利用这些类型和宏,无论是使用ANSI还是Unicode字符都能通过编译.