<Windows 程序设计>读书笔记1 --Unicode

读书笔记1 --Unicode

  • 宽节节
宽字节不需要Unicode.Unicode是一种可能的宽字符编码.ANSI C也支持多字节字符集.
C中的宽字符基于wchar_t数据类型 typedef unsigned short wchar_t  (无符号短整型,16位宽)
wchar_t * p=L"Hello";
static wchar_t a[]=L"Hello";
L代表 long

wchar_t c=L'A'; 

这里的L通常是不必要的.编译器无论如何会对该字符进行零扩充

 

计算字符串长度时strlen(const char *) 对应的宽字节版本函数为wcslen(const wchar_t *)
  • 维护单一源码

一系列的宏皆为维护既能按ASCII编译又能按Unicode编译的单一代码文件.

TCHAR.H头文件定义如下宏:
如果定义了 _UNICODE标识符
typedef wchar_t TCHAR
反之
typedef char TCHAR
#define __T(x) L##x
#define _T(x) __T(x)

#define _TEXT(x) __T(x)

用_T(x)宏来定义字符串文字,根据_UNICODE的标识符,将字符串解释为宽字符的组合或8位的字符
如c运行库中计算字符串长度时strlen(const char *),wcslen(const wchar_t *)
windows字符串函数为:
int lstrlen(      
    LPCTSTR lpString );
LPCTSTR的定义:
winbase.h中
#ifdef  UNICODE                     // r_winnt
#ifndef _TCHAR_DEFINED
typedef WCHAR TCHAR, *PTCHAR;
typedef WCHAR TBYTE , *PTBYTE ;
#define _TCHAR_DEFINED
#endif /* !_TCHAR_DEFINED */
typedef LPWCH LPTCH, PTCH;
typedef LPWSTR PTSTR, LPTSTR;
typedef LPCWSTR PCTSTR, LPCTSTR;
typedef LPUWSTR PUTSTR, LPUTSTR;
typedef LPCUWSTR PCUTSTR, LPCUTSTR;
typedef LPWSTR LP;
#define __TEXT(quote) L##quote      // r_winnt
#else   /* UNICODE */               // r_winnt
#ifndef _TCHAR_DEFINED
typedef char TCHAR, *PTCHAR;
typedef unsigned char TBYTE , *PTBYTE ;
#define _TCHAR_DEFINED
#endif /* !_TCHAR_DEFINED */
typedef LPCH LPTCH, PTCH;
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
#define __TEXT(quote) quote         // r_winnt
#endif /* UNICODE */                // r_winnt
#define TEXT(quote) __TEXT(quote)   // r_winnt

 

 

posted on 2009-05-23 21:18  Haozes  阅读(362)  评论(1编辑  收藏  举报