TCHAR、_T与_TEXT

【TCHAR、_T与_TEXT】【strcpy、wcscpy与_tcscpy】 (内容出自《把脉VC++》,挺好的一本书,下面内容是我整理摘录的两小节,顺便吐槽微软还真是整天把C搞的多复杂,让人找来找去) 4.5.3  TCHAR、_T与_TEXT 计算机最初使用的不是UNICODE,最初的系统和程序都采用的是ANSI或者MBCS,那么,问题来了:我们开发程序的时候,是采用char还是wchar_t?观察如下代码: char msg[] = "学习C++ 阅读详情

计算机最初使用的不是UNICODE,最初的系统和程序都采用的是ANSI或者MBCS,那么,问题来了:我们开发程序的时候,是采用char还是wchar_t?观察如下代码:

 
  1. char msg[] = "学习C++"; 

当我们准备采用wchar_t时,则需要改成:

 
  1. wchar_t msg[] = L"学习C++"; 

太麻烦了!幸运的是,Visual C++的开发者预知到了这样的麻烦,他们从而为此造出了一批宏,这些宏看起来乱七八糟的,但是确实解决了我们的问题,且看一段代码:

 
  1. TCHAR msg[] = _T("学习C++"); 

这段代码中,msg到底是char数组还是wchar_t数组呢?Visual C++的解释是,如果需要它是char数组,那么它就是char数组;否则,它就是wchar_t数组。这样的魅力来源于宏TCHAR的定义:

 
  1. typedef   unsigned   char   CHAR;  
  2. typedef   unsigned   wchar_t   WCHAR;   
  3.  
  4. #ifdef   UNICODE  
  5.     typedef   wchar_t   TCHAR;   
  6. #else  
  7.     typedef   unsigned   char   TCHAR;  
  8. #endif 

由此可以看出,CHAR实际上就是unsigned char,WCHAR为wchar_t,而TCHAR根据是否支持UNICODE而不同。宏UNICODE由此变得尤其重要,当我们定义了UNICODE宏,就相当于告诉了编译器:我准备采用UNICODE版本。这个时候,TCHAR就会摇身一变,由unsigned char变成了wchar_t。

Visual C++项目属性中都包含一项字符集的设置,如图4-14所示。很容易理解,它与宏UNICODE之间存在着某种关系(还有宏MCBS,为了简化讨论,在此省略)。

 
(点击查看大图)图4-14  在Visual C++中设置项目采用的字符集

前面分析了TCHAR,接下来再来看看_T的含义:

 
  1. #define _T(x)       __T(x)  
  2. #define _TEXT(x)    __T(x)  
  3.  
  4. #ifdef   UNICODE  
  5.     #define __T(x)      L ## x  
  6. #else  
  7.     #define __T(x)      x  
  8. #endif 

同理,当UNICODE宏被定义,"_T("学习C++")"会解释成"L"学习C++"",否则它只将其解释成""学习C++""。

因此,我们建议这样书写代码:

 
  1. TCHAR msg[] = _T("学习C++"); 

除TCHAR之外,Windows还定义了一系列的包含T的宏:

 
  1. #ifdef  UNICODE   
  2.     typedef WCHAR TCHAR, * PTCHAR ;  
  3.     typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;   
  4.     typedef LPCWSTR LPCTSTR ;        
  5. #else  
  6.     typedef char TCHAR, * PTCHAR ;    
  7.     typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;   
  8.     typedef LPCSTR LPCTSTR ;     
  9. #endif 
VC++中的char wchar_T和TCHAR 详细介绍了VC++中的char wchar_T和TCHAR的含义及区别,对于想了解各种编码的初学者有着较大用处 立即下载

相关推荐

第六节 旅烨cms实战练习 -2021.03.11

第六节 旅烨cms实战练习 -2021.03.11 前期使用win10里小皮搭建旅烨cms,以为自己的各项配置有问题,但是小皮能够正常带动DVWA,始终带动不了旅烨cms。 后来与其他安全人员交流,发现win7可以正常运行旅烨cms。 所以目前为何出现问题尚不清楚 1.环境搭建 win7+小皮 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nOSTEFUw-1615475228402)(C:\Users\LuXian\AppData\Roaming\Typora\typora

lyx3429的博客 571

4.5.3 TCHAR、_T与_TEXT

白乔专栏 1714

Ubuntu服务器通过IPV6端口转发搭建幻兽帕鲁私服实战

本文详细介绍了在Ubuntu服务器上通过IPV6端口转发搭建幻兽帕鲁私服的完整教程。针对只有公网IPV6地址的服务器环境,提供了从硬件检查、端口转发工具配置到游戏服务器安装的全流程解决方案,帮助玩家轻松实现多人联机游戏体验。

weixin_30652491的博客 489

C++字符类型TCHAR、char和wchar_t

1、首先,char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。 2、wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式,wchar_t类型主要用在国际化程序的实现中,但它不等同于unicode编码。unicode编码的字符一般以wchar_t类型存储。 3、wchar_t数据类型一般为16位或32位,但不同的C或C

h_wlyfw的专栏 2万+

E28 LoRa模块透传 定点传输 RSSI测试与MicroPython应用

测试说明 测试模块数:3 测试模式:配置模式和传输模式 如果没有检测到串口,首先检查是否安装串口驱动CH341SER,下载链接,提取码:vaw2 工作模式 模式(0-3) M2 M1 M0 模式介绍 备注 0 传输模式 1 0 0 串口打开,无线打开,连续透明传输 空速支持手动配置和自适应波特率自动调节;连续模式双方波特率必须一致 1 RSSI 1 0 1 串口打开,无线打开,RSSI功能打开 模块每100ms输出RSSI强度值 2 测距模式 1 1 0 保留 - 3 配置模式

GniLAY1022的博客 4242

修改串口服务器,串口虚拟化 | 串口服务器Nport 5630 设置

原标题:串口虚拟化 | 串口服务器Nport 5630 设置JZGKCHINA项目改造,客户需要对IFix4.5进行升级,并优化通讯,在不改变原来配置的基础上逐步进行替换。需要将IFix升级到IFix5.9,数据库升级为SQL Server 2016,客户现场使用的智能仪表都是支持Modbus RTU协议的,因原来的手拉手的通讯方式的,当一台仪表掉线后,会影响到其他仪表的通讯,所以此次在不改变原有...

weixin_31688465的博客 2407

TCHAR用法

TCHAR 就是当你的字符设置为什么就是什么 例如:程序编译为 ANSI, TCHAR 就是相当于 CHAR 当程序编译为 UNICODE, TCHAR 就相当于 WCHAR char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在里:typedef unsigned short wchar_t。

路在脚下 3万+

Ubuntu20.04下Docker无缝升级实战指南

本文提供了一份在Ubuntu20.04系统上安全、无缝升级Docker的实战指南。文章详细阐述了升级前的版本检查、数据备份等准备工作,逐步演示了通过APT包管理器进行升级或指定版本安装的操作步骤,并强调了升级后的验证与常见问题回滚方案,确保业务容器平稳过渡。

postgres8guard的博客 478

【为什么】_stprintf_s,TCHAR,_T

在 Visual C++ 中,字符串可以用 8 位 ANSI 标准或 16 位 Unicode 表示。函数的第一个参数是要格式化的字符串,第二个参数是要插入到字符串中的值。宏可以保证从 ASCII 编码类型转换到 Unicode 编码类型的时候,程序不需要修改。,这是一种 Windows API 中使用的数据类型,它可以根据编译器设置自动转换为。是两个字节(16 位)或四个字节(32 位)长,具体取决于编译器和操作系统。都是 C++ 中的字符类型,但它们之间有一些区别。,则所有字符串都将是 ANSI。

C++十万个为什么 1258

机器视觉避坑指南:为什么你的Halcon划痕检测总漏检?(附优化方案)

本文深入剖析了Halcon在表面划痕检测中漏检率高的常见原因,如灰度值波动、噪声干扰及形态学参数设置不当。针对复杂背景与低对比度划痕,提出了超越官方例程的多尺度纹理分析与特征融合优化方案,旨在帮助开发者构建更鲁棒、稳定的机器视觉检测流程,有效提升检出率。

weixin_29057163的博客 234

18、未来医疗信息学中的太赫兹天线技术

本文探讨了太赫兹天线技术在医疗信息学中的关键作用,重点分析了分裂环谐振器和纳米结构光导天线(PCA)的设计与性能提升方法,介绍了相干与非相干太赫兹检测技术,并通过等效电路模型和数值模拟深入解析PCA工作机理。文章还展示了太赫兹技术在无创血糖监测、肿瘤检测等医疗诊断中的实验应用,总结了其非侵入性、高分辨率成像和多参数分析等优势,同时指出信号检测难、成本高和技术复杂等挑战。未来趋势包括设备小型化、效率提升及与人工智能融合,拓展至药物研发、皮肤与神经疾病诊断等领域,展现出变革医疗健康的巨大潜力。

milk8的博客 146

【C++学习笔记】wchar_t、WCHAR、TCHAR数据类型,宏L、TEXT、_TEXT、_T

一、在字符串前加一个L作用:          如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。   strlen("asd") = 3;   strlen(L"asd") = 6;   二、 _T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式  

一个程序猿的BLOG 1492

【OAG vs RAG】RAG的“语义崩溃“:为什么你的知识库越大,AI越笨?_语义检索oag-优快云博客

19.9 元(AI 编程 / Agent 实战 | 本文同主题系统课程)·49.9 元(AI 时代成长方法论)。单篇不过瘾?订阅解锁全量源码、实战与答疑;文末附资料包领取方式 ↓图1:RAG语义崩溃概念图。

求知若渴、虚心若愚 70

【TCHAR、_T与_TEXT】【strcpy、wcscpy与_tcscpy】(转)

https://blog.youkuaiyun.com/lu_chaoqun/article/details/19208105 (内容出自《把脉VC++》,挺好的一本书,下面内容是我整理摘录的两小节,顺便吐槽微软还真是整天把C搞的多复杂,让人找来找去) 4.5.3TCHAR、_T与_TEXT 计算机最初使用的不是UNICODE,最初的系统和程序都采用的是ANSI或者MBCS,那么,问题来了:我...

weixin_40554881的博客 444

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TEXT、TCHAR、wchar_t、char的区别

TEXT TEXT是Windows程序设计中经常会遇到的一个宏,在winnt.h中定义。 TCHAR *ptch = TEXT("This is a const string."); 如果使用UNICODE字符集, 则TEXT("This is a const string.")相当于L"This is a const string." 如果使用ASCII集, 则上述字符串相当于“Th

我的地盘 812

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L

http://www.cnblogs.com/projectdevelop/archive/2009/05/12/1454685.html char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在里:typedef unsigned short wchar_t。 为了让编译器识别Unicod

shuixin536的专栏 1041

[转]关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L

    关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L   char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在里:typedef unsigned short wchar_t。 为了让编译器识别Unicode字符串,必须以在前面加一个“L”,定义宽字节类型方

1609

tchar是什么类型 &&dynamic_cast&&L TEXT和 _T的区别

Windows为了消除各编译器的差别,重新定义了一些数据类型。CHAR为单字节字符。还有个WCHAR为Unicode字符,即不论中英文,每个字有两个字节组成。如果当前编译方式为ANSI(默认)方式,TCHAR等价于CHAR,如果为Unicode方式,TCHAR等价于WCHAR。   dynamic_cast : 是安全的类型转化   转化成功不成功是可控的  不成功返回0    B* b ...

309
上一篇: windows API编程之四----模式对话框和非模式对话框的区别
下一篇: 对话框处理TAB按键事件的三种方法
cmdhack
博客等级 码龄19年 20粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值