TCHAR 就是当你的字符设置为什么就是什么
例如:

当程序编译为    ANSI,    TCHAR 相当于 CHAR
当程序编译为 UNICODE, TCHAR 相当于WCHAR

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

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

它实际定义在<string.h>里: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函数

一、 在字符串前加一个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,那就用后两种方法。

【转】TCHAR的更多相关文章

  1. 关于Tchar

    因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串处理函数,比如:strlen和w ...

  2. [C++] zlatlcv: ATL字符串转换辅助库。能很方便的将UTF-8字符串转为TCHAR等字符串

    作者:zyl910 如今,UTF-8字符串的使用频率越来越多了.但是在VC中,不能直接处理UTF-8字符串,得专门去写UTF-8与窄字符串.宽字符串.TCHAR字符串相互转换的代码.不仅费时费力,而且 ...

  3. char与TCHAR相互转化

    char与TCHAR相互转化 char strUsr[10] = "Hello"; TCHAR Name[100]; #ifdef UNICODE MultiByteToWideC ...

  4. TEXT宏,TCHAR类型

    TCHAR *ptch = TEXT("This is a const string."); 如果使用UNICODE字符集, 则TEXT("This is a const ...

  5. QString 和 TCHAR 的相互转换

    参考资料: http://www.cnblogs.com/fuyanwen/p/3200536.htmlhttp://www.cnblogs.com/wendao/archive/2012/07/27 ...

  6. 生成不重复随机数,int转 TCHAR 打印输出

    在0~n 中 随机去除不重复的k个数 int k=100; int n=80000; for(int i=0;k>0&&i<n;i++) { if((bigrand()%( ...

  7. char,wchar_t,WCHAR,TCHAR,ACHAR的区别----LPCTSTR

    转自http://blog.chinaunix.net/uid-7608308-id-2048125.html 简介:这是DWORD及LPCTSTR类型的了解的详细页面,介绍了和类,有关的知识,加入收 ...

  8. ASSERT报错:error C2664: “AfxAssertFailedLine”: 不能将参数 1 从“TCHAR []”转换为“LPCSTR”

    转载请注明来源:崨雁嫀筝 http://www.cnblogs.com/xuesongshu 这个错误是我在把tinyxml修改为宽字符(Unicode)版本时候遇到的问题,我首先按关键字把所有有ch ...

  9. Convert CString to TCHAR

    Quote from: http://vctipsplusplus.wordpress.com/2008/05/21/cstring-to-tchar/ CString is a very usefu ...

  10. 【转】QT QString, wchar_t *, TCHAR, CString和其他字符或字符串类型的转化

    //QString to wchar_t *: const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(fileNa ...

随机推荐

  1. 初学Vue之数量加减

    效果图: HTML: <div class="count3"> <ul> <li v-for="(key,idx) in liList&qu ...

  2. C#学习笔记-工厂模式

    题目:计算器 解析:工厂方法(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类. 定义运算类: class Operation { ; ; public doubl ...

  3. 关于React中状态保存的研究

    在使用react搭配react-router做应用的时候,你可能遇到这样的问题,当我从第一个页面过渡到第二个页面,然后返回之后,发现之前的页面的状态全部不见了,即回到了初始的状态. 这点在页面存在多个 ...

  4. 简单的ajax遮罩层(加载进度圈)cvi_busy_lib.js

    cvi_busy_lib.js cvi_busy_lib.js 是一个基于ajax的遮罩js,遮罩区域为body区域.使用比较简单. 效果: 在下面的Js代码,标注为红色标记为需要设置的参数. 1.g ...

  5. MacBook安装Win10

    // 这是一篇导入进来的旧博客,可能有时效性问题. (一)  确认你的机型 以下机型支持: ü  安装64 位版本Win10 ü  不使用U盘安装Windows l  MacBook(Retina 显 ...

  6. JDBC简单范例

    连接工具类 import java.sql.Connection; import java.sql.DriverManager; public class DBUtil { // 建立连接方法 pub ...

  7. MySQL常用查询语句汇总(不定时更新)

    在这篇文章中我会通过一些例子来介绍日常编程中常用的SQL语句   目录: ## 1.数据库的建立     ## 1.数据库的建立   实例将ER图的形式给出:   由此转换的4个关系模式:      ...

  8. Java数据结构和算法(十一)——红黑树

    上一篇博客我们介绍了二叉搜索树,二叉搜索树对于某个节点而言,其左子树的节点关键值都小于该节点关键值,右子树的所有节点关键值都大于该节点关键值.二叉搜索树作为一种数据结构,其查找.插入和删除操作的时间复 ...

  9. isupper()函数

    isupper()函数可以用来判断字符c是否为大写英文字母! 原型:extern int isupper(int c); 头文件:ctype.h 功能:判断字符c是否为大写英文字母 说明:当参数c为大 ...

  10. 查找第k小的元素(O(n)递归解法)

    今天分享一个小技巧,虽然是小技巧但是还是很有价值的,曾经是微软的面试题.题目是这样的,一个无序的数组让你找出第k小的元素,我当时看到这道题的时候也像很多人一样都是按普通的思维,先排序在去第K个,但是当 ...