WCHAR,CHAR,TCHAR的区别

原创 2013年12月04日 10:01:33
因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串字符串处理函数,比如:strlen和wstrlen,分别用于处理两种字符串   微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数   为了存储这样的通用字符,就有了TCHAR:当没有定义_UNICODE宏时,TCHAR = char,_tcslen = strlen 当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wstrlen   当我们定义了UNICODE宏,就相当于告诉了编译器:我准备采用UNICODE版本。这个时候,TCHAR就会摇身一变,变成了wchar_t。而未定义UNICODE宏时,TCHAR摇身一变,变成了unsigned char 。这样就可以很好的切换宽窄字符集。tchar可用于双字节字符串,使程序可以用于中日韩等国 语言文字处理、显示。使编程方法简化。


现在C++的字符分成两种类型wchar_t和char。    其中   WCHAR==wchar_t,CHAR==char。    TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char。  

CHAR实施上就是unsigned char, WCHAR为宽字符, 而TCHAR根据是否支持unicode而不同。  在程序使用sizeof(TCAHR),当默认设置时,这个值是1; 当定义UNICODE宏时,这个值是2。

BSTR是BASICA中的字符串在C++中的表示方法,它是一种带有字符计数的wchar_t类型的字符串,SysAllocString,   SysFreeString这两个函数是Windows中专门处理BSTR的函数(属于COM函数)。         各种类型之间是可以进行强制转换的(有些有专有的函数比如wchar_t和char的相互转换)

/////////////////////////////////////////////////////////////////////////////////////

WCHAR,CHAR,TCHAR的关系实际上是这样的         #ifdef   UNICODE                typedef   wchar_t   TCHAR;      #else                typedef   unsigned   char   TCHAR;      #endif             typedef   unsigned   char   CHAR;      typedef   unsigned   wchar_t   WCHAR;           //wchar_t   16-bit   predefined   type   for   wide   characters.   Unsigned           A   BSTR,   known   as   basic   string   or   binary   string,   is   a   pointer   to   a   wide   character   string   used   by   Automation   data   manipulation   functions.         typedef   OLECHAR   FAR*   BSTR;           BSTRs   are   wide,   double-byte   (Unicode)   strings   on   32-bit   Windows   platforms   and   narrow,   single-byte   strings   on   the   Apple®   PowerMac™.         因而不能直接进行强制转换,系统提供了一些宏进行转换如OLE2T,T2OLE。    另外   BSTR   并在   COM   对象之间传递它们时,必须小心地处理它们所使用的内存以避免内存泄漏。当   BSTR   停留在接口中时,在完成其使用后必须释放出它的内存。但是,如果   BSTR   传递出了接口,那么接收对象将负责它的内存管理。管理的函数就诸如SysAllocString,   SysFreeString。BSTR是一个比较复杂的数据类型,系统有许多关于他的操作和封装对象,应该看一些有关方面的书。其他的问题请提的具体些,并且多给一点分。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

1.char* to wchar*  WCHAR* ToWChar(char * str)  {  static WCHAR buffer[1024];  wcsset(buffer,0);  MultiByteToWideChar(CP_ACP,0,str,strlen(str),buffer,1024);  return buffer;  }  2 wchar* to char*  (1)use WideCharToMultiByte  uchar wszSomeString[1024];  char szANSIString [MAX_PATH];  WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL );  (2)use W2A:  USES_CONVERSION;  pTemp=W2A(wszSomeString);                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

1. char * --> UNICODE WCHAR *  CComBSTR bstr(str);  2. UNICODE WCHAR*到 char *  CString str(wchar*);


char 8 字节 :
char *p = "hello";
char p[] = "hello";
宽字符 
typedef unsigned short wchar_t;   
wchar_t 16 字节;
wchar_t c = 'A';
wchar_t Cw = L"hello";   14 字节 --->最后还有一个0;
L : 告诉编译器,按宽字符保存;strlen(const char*)     //用于计算单字符的长度
wcslen(const wchar_t*); //用于计算宽字符的长度。
strlen(p);          如果两个混用将出现错误;             
wcslen(cw);          ---〉== 6;(自动去掉末尾的0)
还有一些函数:
wprintf, ----printf
wsprintf, ----sprintf
wvsprintf ----vsprintf


获取长度:

LPCTSTR strTmp : lstrlen( LPCTSTR lpString );  char *strTmp : strlen( const char *string );  _bstr_t strTmp : wcslen( const wchar_t *string );  

char TCHAR WCHAR区别

  • 2013年05月14日 19:02
  • 228KB
  • 下载

windows编程中的char, TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR区别

TCHAR可以根据定义编译变量不同解释为char, wchar_t。用时需要加入对头文件 tchar.h 的文件 LPXXX其实是指向相应类型的字符串的指针(LP -- long pointer) ...

char,TCHAR,WCHAR区别

[转]VC中char,TCHAR,WCHAR总结char,TCHAR,WCHAR区别#ifdef   UNICODE     typedef   wchar_t   TCHAR;    #else  ...
  • badwps
  • badwps
  • 2011年01月23日 14:01
  • 3184

char,TCHAR,WCHAR区别

char,TCHAR,WCHAR区别 #ifdef   UNICODE      typedef   wchar_t   TCHAR;     #else      typedef  ...
  • heary29
  • heary29
  • 2015年06月12日 23:12
  • 209

WCHAR,CHAR,TCHAR的区别

现在C++的字符分成两种类型wchar_t和char。   其中   WCHAR==wchar_t,CHAR==char。   TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或ch...
  • Qsir
  • Qsir
  • 2017年07月10日 09:07
  • 141

char,wchar_t,TCHAR的区别

The difference here is the character type. When calling WinAPI functions, the type of string you pas...

TCHAR char wchar_t 的区别

有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,有必要把来龙去脉搞清楚。 为了搞清这些函数,就必须理请几种字符类型的写法。char就不用说了,先说一些wchar_t。wchar_...

CHAR,TCHAR,WCHAR 三者的区别与转换

CHAR,TCHAR,WCHAR 三者的区别与转换 #ifdef UNICODE typedef wchar_t TCHAR; #el...

TCHAR、wchar_t、char及字符串处理函数区别

原文: http://wenku.baidu.com/view/3563ad6448d7c1c708a1450c.html TCHAR、wchar_t、char及字符串处理函数区别 ...
  • anypkv
  • anypkv
  • 2012年03月13日 14:18
  • 245

【转】WCHAR,CHAR,TCHAR的区别

现在C++的字符分成两种类型wchar_t和char。  其中   WCHAR==wchar_t,CHAR==char。  TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WCHAR,CHAR,TCHAR的区别
举报原因:
原因补充:

(最多只允许输入30个字)