zoukankan      html  css  js  c++  java
  • 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的。

  • 相关阅读:
    第三十章 货币增长与通货膨胀
    第二十九章 货币制度
    第二十八章 失业
    第二十七章 金融学的基本工具
    第二十六章 储需、投资和金融体系
    第二十五章 生产与增长
    第二十四章 生活费用的衡量
    第二十三章 一国收入的衡量
    第二十二章 微观经济学前沿
    Struts2 文件上传进度条的实现
  • 原文地址:https://www.cnblogs.com/shikamaru/p/7815627.html
Copyright © 2011-2022 走看看