VC++中的 _T("") 与 L""

字符串前面加L表示该字符串是Unicode字符串。
_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,Visual 
C++里边定义字符串的时候,用_T来保证兼容性。VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。

一、在字符串前加一个L作用: 

如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。 
strlen("asd") = 3; 

strlen(L"asd") = 6; 
二、 
_T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式 

如果你定义了UNICODE,那么_T宏会把字符串前面加一个L。这时 _T("ABCD") 相当于 L"ABCD" ,这是宽字符串。 

如果没有定义,那么_T宏不会在字符串前面加那个L,_T("ABCD") 就等价于 "ABCD" 

 

 

因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。

  而后者是双字节方式,方便处理双字节字符。Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。

  如果你编译一个程序为ANSI方式,_T实际不起任何作用,编译器会把_T("Hello")以ANSI方式保存;而如果编译一个程序为UNICODE方式,则编译器会把_T("Hello")字符串以UNICODE方式保存。

      _T和L的区别在于,L不管你是以什么方式编译,一律以UNICODE方式保存。

  LPSTR:32bit指针指向一个字符串,每个字符占1字节

  LPCSTR:32-bit指针指向一个常字符串,每个字符占1字节

  LPCTSTR:32-bit指针指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义

  LPTSTR:32-bit指针每字符可能占1字节或2字节,取决于Unicode是否定义

  L是表示字符串资源为Unicode的。

  比如

  wchar_t Str[] = L"Hello World!";

  这个就是双子节存储字符了。

  _T是一个适配的宏~

  当

  #ifdef _UNICODE的时候

  _T就是L

  没有#ifdef _UNICODE的时候

  _T就是ANSI的。

posted @ 2017-11-10 17:20  蒋鹿丸  阅读(2506)  评论(0编辑  收藏  举报