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

本文探讨了Unicode和ANSI字符集在Windows编程中的区别与应用场景,重点介绍了Unicode字符的优势及其如何提高应用程序效率,并详细展示了相关数据类型的定义及代码适配技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值