当前位置: 首页 > news >正文

_T() 函数

_T("")是一个宏,他的作用是让你的程序支持Unicode编码。我理解中,T是Transformation(转换)的意思。
因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。

Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。_T辅助这两种方式的转换。
如果你编译一个程序为ANSI方式,_T实际不起任何作用。
而如果编译一个程序为UNICODE方式,则编译器会把"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的。

比如

LPTSTR lpStr = new TCHAR[32];
TCHAR* szBuf = _T("Hello");
以上两句使得无论是在UNICODE编译条件下都是正确编译的。

而且MS推荐你使用相匹配的字符串函数。
比如处理LPTSTR或者LPCTSTR 的时候,不要用strlen ,而是要用_tcslen

否则在UNICODE的编译条件下,strlen不能处理 wchar_t*的字符串。

T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不明确表示使用 MBCS,也不明确表示使用 UNICODE。那到底使用哪种字符集?编译的时候才决定。

相关文章:

  • DirectUI
  • 托管与非托管
  • 什么是回调函数?
  • ShowWindow与UpdateWindow
  • VS2015无法打开源文件#include “iostream.h“的解决方法
  • BHO
  • 开放平台
  • js(=>) 箭头函数
  • JavaScript中的回调函数(callback)
  • com教程(使用VS2015编写ATL示例)
  • 控制台console使用MFC库函数,Cout输出CString的方法
  • PDFsharp使用介绍
  • 详解开源免费且稳定实用的.NET PDF打印组件itextSharp
  • 机器人是什么
  • C++中L和_T()之区别
  • [deviceone开发]-do_Webview的基本示例
  • golang中接口赋值与方法集
  • learning koa2.x
  • Material Design
  • nginx 负载服务器优化
  • opencv python Meanshift 和 Camshift
  • python 装饰器(一)
  • redis学习笔记(三):列表、集合、有序集合
  • SpringBoot几种定时任务的实现方式
  • 关于Flux,Vuex,Redux的思考
  • 嵌入式文件系统
  • 如何设计一个比特币钱包服务
  • 通过git安装npm私有模块
  • 用简单代码看卷积组块发展
  • Nginx实现动静分离
  • puppet连载22:define用法
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)程序员技术练级攻略
  • .NET NPOI导出Excel详解
  • .NET 命令行参数包含应用程序路径吗?
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET单元测试
  • .NET的数据绑定
  • .NET和.COM和.CN域名区别
  • [ NOI 2001 ] 食物链
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [100天算法】-目标和(day 79)
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [docker] Docker容器服务更新与发现之consul