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的。

  • 相关阅读:
    [转]WebForm中使用MVC
    [转]外贸出口流程图
    [转]查看SQL Server被锁的表以及如何解锁
    [转]RDL Report in Visual Studio New page per Record
    [转]Sql Server Report Service 的部署问题
    [转]ASP.NET MVC4中@model使用多个类型实例的方法
    [转]告别写计划的烦恼!一页纸四步打造出一份牛逼的商业计划
    [转]LINQ: Using INNER JOIN, Group and SUM
    [转] 比特币『私钥』『公钥』『钱包地址』间的关系
    [转]SQL SERVER数据库删除LOG文件和清空日志的方案
  • 原文地址:https://www.cnblogs.com/shikamaru/p/7815627.html
Copyright © 2011-2022 走看看