读书笔记1 --Unicode

本文探讨了宽字符和Unicode的概念及其在C语言中的应用。详细介绍了wchar_t数据类型的使用,并对比了ANSI C与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

 

 

转载于:https://www.cnblogs.com/solo/archive/2009/05/23/1487892.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值