windows——字符 字符串

来源:互联网 发布:php jsp asp 市场份额 编辑:程序博客网 时间:2024/05/21 17:50

字符

c标准支持两种字符数据类型:
  • char:正常字符,字长8-bit
  • wchar_t:宽字符,字长16-bit
因此每个带字符(串)参数API就必须包含两个版本:
  • char版本,比如计算字符串长度strlen
  • wchar_t版本,比如计算字符串长度wcslen

API

windows开发使用两套独立API:
  • c标准API,windows开发使用宏_UNICODE控制c标准API的char版本和wchar_t版本,_UNICODE宏定义,c标准API使用wchar_t版本,否则c标准API使用char版本
  • windows API,windows开发使用宏UNICODE控制windows API的char版本和wchar_t版本,UNICODE宏定义,windows API使用wchar_t版本,否则windows API使用char版本
注:尽管使用_UNICODE和UNICODE这样的宏名称,但wchar_t字符(串)并非使用UNICODE编码,千万不要混淆

c标准API

windows使用宏_UNICODE控制c标准API的char版本和wchar_t版本,为使c标准API的char版本和wchar_t版本调用统一,windows在tchar.h中使用宏统一定义了字符数据类型,字符串和c标准API中带字符(串)参数API
  • 字符数据类型:TCHAR或_TCHAR,_UNICODE宏定义,TCHAR或_TCHAR为wchar_t,否则TCHAR或_TCHAR为char
  • 字符串:__T(x)或_T(x)或_TEXT(x),_UNICODE宏定义,__T(x)或_T(x)或_TEXT(x)为whcar_t字符串版本,否则__T(x)或_T(x)或_TEXT(x)为char字符串版本
  • c标准API:_UNICODE宏定义,API为wchar_t版本,否则为char版本,比如_tcslen,_UNICODE宏定义,_tcslen为wcslen,否则_tcslen为strlen
注1:tchar.h并非c标准一部分,只是为了使char版本和wchar_t版本程序代码统一,使用tchar.h统一定义了char版本和wchar_t版本字符数据类型,字符串,带字符(串)参数API,在windows开发中,为了兼容统一性,务必使用tchar.h中字符数据类型,字符串,带字符(串)参数API
注2:对于带字符(串)参数c标准API,char版本无前缀,wchar_t版本以wc前缀,TCHAR或_TCHAR版本以_tc前缀

windows API

windows使用宏UNICODE控制windows API的char版本和wchar_t版本,为使windows API的char版本和wchar_t版本调用统一,windows在winnt.h中使用宏统一定义了字符数据类型,字符串,在winuser.h等头文件中使用宏统一定义了带字符(串)字段windows struct或union,带字符(串)参数(直接或间接)windows API
  • 字符数据类型:TCHAR,UNICODE宏定义,TCHAR为wchar_t,否则TCHAR为char
  • 字符串:__TEXT(x)或TEXT(x),UNICODE宏定义,__TEXT(x)或TEXT(x)为wchar_t字符串版本,否则__TEXT(x)或TEXT(x)为char字符串版本
  • windows struct或union:UNICODE宏定义,struct或union为wchar_t版本,否则为char版本,比如WNDCLASS,UNICODE宏定义,WNDCLASS为WNDCLASSW,否则WNDCLASS为WNDCLASSA
  • windows API:UNICODE宏定义,API为wchar_t版本,否则为char版本,比如MessageBox,UNICODE宏定义,MessageBox为MessageBoxW,否则MessageBox为MessageBoxA
注1:对于带字符(串)字段windows struct或union,char版本以A后缀,wchar_t版本以W后缀,TCHAR版本无后缀
注2:对于带字符(串)参数(直接或间接)windows API,char版本以A后缀,wchar_t版本以W后缀,TCHAR版本无后缀
注3:直接字符(串)参数指参数类型为字符(串),间接字符(串)参数指参数类型为windows struct或union,其包含字符(串)类型字段
原创粉丝点击