博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++中的 _T("") 与 L""
阅读量:6081 次
发布时间:2019-06-20

本文共 1151 字,大约阅读时间需要 3 分钟。

字符串前面加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的。

  比如

   Str[] = L"Hello World!";

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

  _T是一个适配的宏~

  当

  #ifdef _UNICODE的时候

  _T就是L

  没有#ifdef _UNICODE的时候

  _T就是ANSI的。

转载于:https://www.cnblogs.com/shikamaru/p/7815627.html

你可能感兴趣的文章
maven项目在eclipse的library中没有Maven Dependencies
查看>>
RN初始化环境快速配置
查看>>
10.Lambda表达式入门
查看>>
maven jar 导入本地仓库
查看>>
ExtentTestNGIReporterListener
查看>>
UIView
查看>>
Layer Filters
查看>>
微信小程序 解决 数字粗细不一 的bug
查看>>
mock.js 的用法 -- 脱离后端独立开发,实现增删改查功能
查看>>
FJ省队集训最终测试 T2
查看>>
PHP csv文件内容转成数组/Json
查看>>
[结题报告]11479 - Is this the easiest problem? Time limit: 1.000 seconds
查看>>
php中使用linux命令四大步骤
查看>>
neo4j安装与示例
查看>>
ExceptionLess新玩法 — 记日志
查看>>
RabbitMQ 集群
查看>>
启动jetty命令
查看>>
C#获取当前时间与同步时间
查看>>
端口被占用了,使用netstat找到占用端口的进程
查看>>
springboot的profile配置
查看>>