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

TCHAR、_T与_TEXT 计算机最初使用的不是UNICODE,最初的系统和程序都采用的是ANSI或者MBCS,那么,问题来了:我们开发程序的时候,是采用char还是wchar_t?观察如下代码: char msg[] = "学习C++";  当我们准备采用wchar_t时,则需要改成: wchar_t msg[] = L"学习C++";  太麻烦了!幸运的是,Visual C++的开发者预知到了这样的麻烦,他们从而 阅读详情

 

 

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

 

char :单字节变量类型,最多表示256个字符,

wchar_t :宽字节变量类型,用于表示Unicode字符,

它实际定义在 里:typedef unsigned short wchar_t。

为了让编译器识别Unicode字符串,必须以在前面加一个“L”,定义宽字节类型方法如下:

    wchar_t c = `A' ;
wchar_t * p = L"Hello!" ;
wchar_t a[] = L"Hello!" ;

其中,宽字节类型每个变量占用2个字节,故上述数组a的sizeof(a) = 14

 

TCHAR / _T( ) :


如果在程序中既包括ANSI又包括Unicode编码,需要包括头文件tchar.h。TCHAR是定义在该头文件中的宏,它视你是否定义了_UNICODE宏而定义成:
定义了_UNICODE:    typedef wchar_t TCHAR ;
没有定义_UNICODE: typedef char TCHAR ;

#ifdef UNICODE
typedef char TCHAR;
#else
typede wchar_t TCHAR;
#endif
_T( )也是定义在该头文件中的宏,视是否定义了_UNICODE宏而定义成:
定义了_UNICODE:    #define _T(x) L##x
没有定义_UNICODE: #define _T(x) x
注意:如果在程序中使用了TCHAR,那么就不应该使用ANSI的strXXX函数或者Unicode的wcsXXX函数了,而必须使用tchar.h中定义的_tcsXXX函数。

以strcpy函数为例子,总结一下:

 

Code


//如果你想使用ANSI字符串,那么请使用这一套写法: 
char szString[100]; 
strcpy(szString,"test"); 
//如果你想使用Unicode字符串,那么请使用这一套: 
wchar_t szString[100]; 
wcscpy(szString,L"test"); 
//如果你想通过定义_UNICODE宏,而编译ANSI或者Unicode字符串代码: 
TCHAR szString[100]; 
_tcscpy(szString,_TEXT("test"));

优快云:superarhow说:不要再使用TCHAR和_T了!他分析了原因后总结:如果您正开始一个新的项目,请无论如何也要顶住压力,直接使用UNICODE编码!切记!您只需要对您的组员进行10分钟的培训,记住strcpy用 wcscpy,sprintf用swprintf代替,常数前加L,就可以了!它不会花您很多时间的,带给您的是稳定和安全!相信偶,没错的!!

 

一、 在字符串前加一个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" 。

三、TEXT,_TEXT 和_T 一样的


如下面三语句:  
  TCHAR   szStr1[]   =   TEXT("str1");  
  char   szStr2[]   =   "str2";  
  WCHAR   szStr3[]   =   L("str3");  
  那么第一句话在定义了UNICODE时会解释为第三句话,没有定义时就等于第二句话。  
  但二句话无论是否定义了UNICODE都是生成一个ANSI字符串,而第三句话总是生成UNICODE字符串。  
  为了程序的可移植性,建议都用第一种表示方法。  
  但在某些情况下,某个字符必须为ANSI或UNICODE,那就用后两种方法。

C语言头文件 TCHAR C语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 TCHARC语言头文件 T 立即下载

相关推荐

Redash离线环境部署2020.1(centos+windows)

背景 Redash是一款开源的BI系统,核心功能是添加数据源,然后进行数据的可视化展示。一般会拿出来同Supervisor和Metabase进行选型比较,这里对三者的选型不做细致分析。而是给出在Redash开发环境部署踩过的坑,很多坑是自己琢磨出来的,网上几乎找不到更新的资料。适用于没怎么用过linux,也不怎么熟悉python的,用的是最新(master)的redash的代码(上一个发布版本...

Jone_wan的专栏 2139

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

char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在<string.h>里:typedef unsigned short wchar_t。 为了让编译器识别Unicode字符串,必须以在前面加一个“L”,定义宽字节类型方法如下: wchar_t c = `A' ; wchar_t * p = L...

weixin_30952535的博客 227

从二极管到CMOS:手把手教你搭建数字电路中的基础门电路(附原理图)

本文详细介绍了数字电路中基础门电路的搭建方法,从二极管门电路到现代CMOS门电路的设计与实现。通过原理图解析和实战案例,帮助读者掌握数字电路设计的核心知识,包括电平实现、门电路工作原理及实际调试技巧,适合电子技术爱好者和初学者学习参考。

weixin_29252171的博客 321

C语言中宽字符/宽字符串的输入输出(wchar_t和wprintf)

char在C/C++中只占一个字节,通常只用来处理ASCII码,所以不能用来存放汉字等象形文字。通常我们使用Unicode字符集(万国码),支持全球的语言文化。utf-16足以存放全球常用的字符,所以在微软的编译器中,使用2个字节来存储字符,而在其他编译器中,比如GCC和LLVM/Clang采用utf-32来存放字符,占4个字节。使用两个字节存储的另外一个好处是可以节省内存,而使用四个字节会浪费 ...

BlackShadowT的博客 1万+

ArcGIS 10.2 保姆级安装与破解教程(含License Manager启动失败解决方案)

本文提供ArcGIS 10.2中文版的保姆级安装与破解教程,详细讲解从环境检查到License Manager配置的全流程,特别针对License Manager启动失败等常见问题提供专业解决方案,帮助用户顺利完成地理信息系统软件的安装与激活。

weixin_26757925的博客 1182

STM32F407驱动OV2640摄像头:从SCCB协议到I2C模拟的保姆级避坑指南

本文详细介绍了STM32F407驱动OV2640摄像头的完整流程,重点解析SCCB协议与I2C的关键差异,并提供GPIO模拟实现方案。通过实战案例和调试技巧,帮助开发者避开常见陷阱,实现稳定的图像采集功能。

weixin_28700411的博客 345

使用CParaFormat和TCharFormat对文本进行格式化

适用版本: Series 60 2nd, Series 60 3rd 使用文本表示时我们常常希望通过对字体颜色,字体颜色或者段落的区别来突出重点,或者区分不同内容,symbian为我们提供了CParaFormat和T...

cmh0000的博客 332

大模型微调框架之TRL

近年来,大语言模型(LLMs)的快速发展推动了下游应用的繁荣,但如何高效地对这些模型进行对齐和微调,依然是研究与应用的热点。Hugging Face 开源的 TRL(Transformer Reinforcement Learning) 框架,提供了基于强化学习的语言模型训练方法,并支持 SFT(监督微调)、PPO(近端策略优化)、DPO(直接偏好优化)等多种方式,是目前对齐和微调 LLM 的重要工具。

和大家一起涨芝士 905

格式化字符串的使用

MSDN上的定义: TCHAR.H routine           _UNICODE & _MBCS not defined               _MBCS defined                        _UNICODE defined _stprintf_s                                    sprintf_s     

zac的专栏 491

LLM的MCP协议:初识MCP,搭建第一个MCP Server

MCP(Model Context Protocol),是一个开发的协议,标准化了应用程序如何为大模型提供上下文。MCP提供了一个标准的为LLM提供数据、工具的方式,使用MCP会更容易的构建Agent或者是基于LLM的复杂工作流。

Criss@陈磊 2万+

11.嵌入式控制器EC实战 KBC矩阵键盘Keyboard开发流程

文章目录笔记本矩阵键盘概述矩阵键盘的扫描方式行列扫描方式逐行逐列扫描方式EC中矩阵键盘是如何扫描并得到码值的(代码分析) 笔记本矩阵键盘概述 在EC中支持两种形式的键盘,一种是PS/2接口的键盘,这种键盘几乎已经被USB接口的键盘所取代,所以PS/2接口的键盘不在我们的讨论范围。 另一种键盘则是矩阵键盘,也是笔记本电脑的内置键盘,该键盘类似于学习单片机时使用的4*4的那种键盘,笔记本使用的矩阵键盘有三种规格,分别是16*8、17*8和18*8。16、17和18代表着该款键盘的列数,8代表着键盘的行数,我们这

qq_30135687的博客 3809

C++_TCHAR字符串在UNICODE环境的控制台下输出

TCHAR字符串在UNICODE环境下 是不能直接用cout 输出的, 原因是 cout 为 ostream流对象实例,直接用cout 输出TCHAR字符串会输出字符串的地址 //TODO:测试代码 //得到了非空一个字符串,则查找成功。 //...... //.....将该字符串转换为TCHAR..... //...... USES_CONVERSI

迎难而上 1万+

互联网人提高效率必备软件合集

很多的时候我们解决不了问题,只是因为没有找到对的工具,实际上,很多好的工具就在那里,只是你不用而已。这点上,信息壁垒是一个很大的原因,因此我希望兄伙伴们多出去走走,不要只是局限在一个圈层;

zhonglunshun的专栏 3484

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

原文链接:http://www.cnblogs.com/wanghao111/archive/2009/05/25/1488816.html char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在<string.h>里:typedef unsigned short wchar_t。 为了让编译器识别Uni...

weixin_30872789的博客 95

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在&lt;string.h&gt;里:typedef unsigned short wchar_t。 为了让编译器识别Unicode字符串,必须以在前面加一个“L”,定义宽字节类型方法如下:   wchar_t c = `A' ; wchar_t * p = L"Hello...

weixin_33749242的博客 78

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VC++ WCHAR,CHAR,TCHAR的区别

<br />C++的字符分成两种类型wchar_t和char。   <br />其中   WCHAR==wchar_t,CHAR==char。   <br />TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char。 <br />#ifdef   UNICODE     <br />          typedef   wchar_t   TCHAR;     <br />#else     <br />          typedef   unsigned   char   TCHA

scollins的专栏 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

区别wchar_t,char,WCHAR

转至:http://www.360doc.com/content/12/0807/01/9290626_228750141.shtml 1.区别wchar_t,char,WCHAR   ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数。  UNICODE:wchar_t是Unicode字符的数据类型,它实际定义在里:  t...

lcxhjg的专栏 6120

TCHAR char wchar_t 的区别

有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,有必要把来龙去脉搞清楚。 为了搞清这些函数,就必须理请几种字符类型的写法。char就不用说了,先说一些wchar_t。wchar_t是Unicode字符的数据类型,它实际定义在里:typedef unsigned short wchar_t;   不能使用类似strcpy这样的ANSI C字符串函数来处理wchar_t字符串,必

dongyonghui_1017的专栏 4821

ANSI,Unicode;char,wchar_t, TCHAR;LPSTR, LPWSTR总结

摘要: 本文总结对比了ANSI/Unicode,char/wchar_t,LPSTR/LPWSTR。 简单描述了char, wchar_t,  TCHAR的初始化,操作函数,输出的方法。 数据类型 操作 初始化 输出 WinLP ANSI char str(strcpy) "char" printf LPSTR Unicode wchar_t wcs(wcscpy) L"char" wprintf LPWSTR 通用 TCHAR _tcs(_tcscpy) _T("char") _tprintf

矩阵实验室 2130

char,wchar_t,CHAR,WCHAR,TCHAR,PSTR,PCSTR,PCTSTR,_T,_TEXT,L

char,wchar_t,CHAR,WCHAR,TCHAR,PSTR,PCSTR,PCTSTR,_T,_TEXT,L 首先,这是一个字符集的问题。在ANSI字符集中,字符类型是char,在UNICODE字符集中,字符类型是wchar_t,也可以称之为宽字符,宽字符占...

aduo5591的博客 307

VC++中的char,wchar_t,TCHAR

1、VC++中的char,wchar_t,TCHAR 大家一起做一个项目,经常发现有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,这个问题曾经搞的很混乱。为了统一,有必要把来龙去脉搞清楚。 为了搞清这些函数,就必须理请几种字符类型的写法。char就不用说了,先说一些wchar_t。wchar_t是Unicode字符的数据类型,它实际定义在<string.h>里...

游戏开发、游戏引擎开发、逆向破解爱好者 1272

TCHAR ,UNICODE,CHAR,wchar_t 来龙去脉!(转!)

大家一起做一个项目,经常发现有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,这个问题曾经搞的很混乱。为了统一,有必要把来龙去脉搞清楚。 为了搞清这些函数,就必须理请几种字符类型的写法。char就不用说了,先说一些wchar_t。wchar_t是Unicode字符的数据类型,它实际定义在里: typedef unsigned short wchar_t;不能使用类似strc

jasonM2008的专栏 1691
上一篇: [转]CString、TCHAR*、char*转换
下一篇: 关于AfxMessageBox函数
Linruin
博客等级 码龄19年 18粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值