windows核心编程学习日记-字符和字符串处理 上篇

来源:互联网 发布:淘宝网网站需求分析 编辑:程序博客网 时间:2024/05/18 11:35

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字符都能通过编译.

0 0
原创粉丝点击