window programming --Unicode

window programming --Unicode

一 Unicode 简介
 1 Unicode 是ASCII 扩展,从传统的7位,扩展位16 位,可以显示世界上所有语言
ASCII 码
       0-     1-     2-     3-     4-     5-     6-     7-
-0     NUL    DLE    SP     0      @      P      `      p
-1     SOH    DC1    !      1      A      Q      a      q
-2     STX    DC2    "      2      B      R      b      r
-3     ETX    DC3    #      3      C      S      c      s
-4     EOT    DC4    $      4      D      T      d      t
-5     ENQ    NAK    %      5      E      U      e      u
-6     ACK    SYN    &      6      F      V      f      v
-7     BEL    ETB    '      7      G      W      g      w
-8     BS     CAN    (      8      H      X      h      x
-9     HT     EM     )      9      I      Y      I      y
-A     LF     SUB    *      :      J      Z      j      z
-B     VT     ESC    +      ;      K      [      k      {
-C     FF     FS     ,      <      L      \      l      |
-D     CR     GS     -      =      M      ]      m      }
-E     SO     RS     .      >      N      ^      n      ~
-F     SI     US     /      ?      O      _      o      DEL

 2 双位字符集
DBCS:double-byte character set,最初的128个代码是ASCII,较高的128个代码中的某些总是跟随著第

二个位元组。这两个位元组一起(称作首位元组和跟随位元组)定义一个字元。

 3 Unicode 解决方案
  Unicode是统一的16位元系统,也DBCS 这样的同时含有一位和两位的字符集不同,Unicode 可以表示

65536 个字符。
  Unicode 的缺点是,Unicode 使用的空间是ASCII 的两倍
二 宽字符和c
 1 char
  char c='A';
  变量c 用一个字节来存储,用16 进制表示位0x41
  char * p;
  32 位系统,一次指针变量需要用4个字节表示
  char * p="Hello!";
  字符串占用7个字节 其中 6个用于保存字符串,1个用于保存中止符号0
  char [10]
  占用10个字节
  char a[]="Hello!";
  占用 7个字节
 2 宽字节
  typedef unsigned short whcar_t   which is define in the window.h 
  与unsign short 一样 为16 字节,两个字节
  wchar_t c='A'   0x0041
  wchar_t *p=L"Hello!"  指针占用 4个字节 而 字符串占用 14 个字节
 3 宽字元程序库函数
  char * pc = "Hello!" ;
  iLength = strlen (pc) ;
  wchar_t * pw = L"Hello!" ;
  iLength = wcslen (pw) ;
 4 维护单一原始码
 Microsoft Visual C++包含的TCHAR.H
 如果定义了名为_UNICODE的识别字,并且程式中包含了TCHAR.H表头档案,那么_tcslen就定义为wcslen
 #define _tcslen wcslen
 如果没有定义UNICODE,则_tcslen定义为strlen:
 #define _tcslen strlen
 如果定义了 _UNICODE识别字,那么TCHAR就是wchar_t:
 typedef wchar_t TCHAR ;
 否则,TCHAR就是char:
 typedef char TCHAR ;

 如果没有定义_UNICODE识别字
 #define __T(x) x
 #define _T(x) __T(x)
 #define _TEXT(x) __T(x)

三 宽字节和windows
  1 window 头文件中的类型
  typedef char CHAR ;
  typedef wchar_t WCHAR ;
  typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;
  typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;
  typedef WCHAR * PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;
  typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, * PCWSTR ;

  #ifdef  UNICODE                  
  typedef WCHAR TCHAR, * PTCHAR ;
  typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
  typedef LPCWSTR LPCTSTR ;
  #else
  typedef char TCHAR, * PTCHAR ;
  typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
  typedef LPCSTR LPCTSTR ;
  #endif
  2 Windows 函数调用
  #ifdef UNICODE
  #define MessageBox  MessageBoxW
  #else
  #define MessageBox  MessageBoxA
  #endif
  3 Windows 的字符函数
  ILength = lstrlen (pString) ;
  pString = lstrcpy (pString1, pString2) ;
  pString = lstrcpyn (pString1, pString2, iCount) ;
  pString = lstrcat (pString1, pString2) ;
  iComp = lstrcmp (pString1, pString2) ;
  iComp = lstrcmpi (pString1, pString2) ;
  4 在windows 使用printf
   windows 并不支持printf 但是可以使用sprintf
   int printf (const char * szFormat, ...) ;
   printf ("The sum of %i and %i is %i", 5, 3, 5+3) ;
   int sprintf (char * szBuffer, const char * szFormat, ...) ;
   char szBuffer [100] ;
   sprintf (szBuffer, "The sum of %i and %i is %i", 5, 3, 5+3) ;
   puts (szBuffer) ;



你可能感兴趣的:(window programming --Unicode)