#ifdef   UNICODE     typedef   wchar_t   TCHAR;
#else     typedef   unsigned   char   TCHAR;
#endif typedef   unsigned   char   CHAR;
typedef   unsigned   wchar_t   WCHAR;  

char :

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

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 。wchar_t==WCHAR

TCHAR / _T :

在C语言里面提供了 _UNICODE宏(有下划线),在Windows里面提供了UNICODE宏(无下划线),只要定了_UNICODE宏和UNICODE宏,系统就会自动切换到UNICODE版本,否则,系统按照ANSI的方式进行编译和运行。只定义了宏并不能实现自动的转换,他还需要一系列的字符定义支持。,如果在程序中既包括 ANSI 又包括 Unicode 编码, 需要包括头文件 tchar.h。 TCHAR 是定义在该头文件中的 宏,如果定义了UNICODE宏则TCHAR被定义为wchar_t,否则TCHAR被定义为char。
定义了UNICODE宏: typedef wchar_t TCHAR;
未定义UNICODE宏: typedef char TCHAR;

_T :

_T 是一个适配的宏~ 当定义了 _UNICODE 的时候 _T 就是 L,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L【这时 _T(“ABCD”) 相当于 L”ABCD” ,这是宽字符串】,否则字符串不变【_T宏不会在字符串前面加那个L,_T(“ABCD”) 就等价于 “ABCD” 】。因此,Visual C++里边定义字符串的时候,用_T来保证兼容性。_T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式。
注意:如果在程序中使用了 TCHAR,那么就不应该使用 ANSI 的 strXXX 函数或者 Unicode 的 wcsXXX 函 数了,而必须使用 tchar.h 中定义的_tcsXXX 函数。 以 strcpy 函数为例子,总结一下:

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

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

L :

作用: 如 L”我的字符串” 表示将 ANSI 字符串转换成 unicode 的字符串,就是每个字符占用两个字节。 strlen(“asd”) = 3; strlen(L”asd”) = 6;

TEXT,_TEXT :

和_T 一样的 如下面三语句:

1.TCHAR szStr1[] = TEXT("str1");
2.char szStr2[] = "str2";
3.WCHAR szStr3[] = L("str3"); 

第1句在定义了 UNICODE 时会解释为第3句,没有定义时就等于第2句。 但2句话无论是否定义了 UNICODE 都是生成一个 ANSI 字符串,而第3句话总是生成 UNICODE 字符串。 为了程序的可移植性,建议都用第一种表示方法。 但在某些情况下,某个字符必须为 ANSI 或 UNICODE,那就用后两种方法。

_T():

函数详解 _T(“”)是一个宏,他的作用是让你的程序支持 Unicode 编码 因为 Windows 使用两种字符集 ANSI 和 UNICODE, 前者就是通常使用的单字节方式, 但这种方式处理象中文这样的双字节字符不方便, 容易出现半个汉字的情况。 而后者是双字节方式,方便处理双字节字符。 Windows NT 的所有与字符有关的函数都提供两种方式的版本,而 Windows 9x 只支持 ANSI 方式。 如果你编译一个程序为 ANSI 方式, _T 实际不起任何作用。 而如果编译一个程序为 UNICODE 方式,则编译器会把”Hello”字符串以 UNICODE 方式保存。_T 和_L 的 区别在于,_L 不管你是以什么方式编译,一律以 UNICODE 方式保存。

LPSTR:

32-bit LPSTR 是一个指向以‘\0’结尾的 ANSI 字符数组的指针,每个字符占 1 字节 ,与 char*可以 互换使用,在 win32 中较多地使用 LPSTR。LPSTR = char ,(typedef char LPSTR)

LPCSTR:

32-bit 指针指向一个指向以NULL(‘\0’)结尾的ANSI常量字符串,每个字符占 1 字节 ,LPCSTR 中增加的‘C’的含义是“CONSTANT” (常量) ,表明这种数据类型的实例不能被使用它的 API 函数改变,除此之外,它与 LPSTR 是等同的。

PWSTR:

指向Unicode字符串的指针,每个字符占 2 字节。

PCWSTR:

指向一个恒定的Unicode字符串的指针,每个字符占 2 字节。

LPTSTR:

32-bit 指针每字符可能占 1 字节或 2 字节,取决于 Unicode 是否定义 L 是表示字符串资源为 Unicode 的。

LPCTSTR:

32-bit 指针指向一个常量字符串,每字符可能占 1 字节或 2 字节,取决于 Unicode 是否定义。如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串

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

参考了博客http://www.cnblogs.com/yaowen/archive/2013/01/15/2861727.html

关于char, wchar_t, TCHAR, _T,L,TEXT,_TEXT,LPSTR,LPCSTR,PWSTR,PCWSTR,LPTSTR,LPCTSTR的区别相关推荐

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

    char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在<string.h>里:typedef unsigned s ...

  2. VC++中的char,wchar_t,TCHAR(转载)

    VC++中的char,wchar_t,TCHAR 大家一起做一个项目,经常发现有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,这个问题曾经搞的很混乱.为了统一,有必要把来龙去脉搞 ...

  3. char wchar_t TCHAR

    1.char 是8位字符类型,可以储存不超过256个字符.---多字节(储存英文字符时为1个字节,储存中文字符时为两个字节)ascii 2.wchar_t 是16位或者32位字符类型,跟选择不同的C或 ...

  4. TCHAR char wchar_t PTSTR PCSTR printf() wprintf()——_tprintf()解析

    TCHAR char wchar_t PTSTR PCSTR printf() _tprintf() 晕菜了吧? 转来一篇文章为大家解惑... Petzold的Programming Windows的 ...

  5. size_t,__T,_T,TEXT,_TEXT等一些特殊宏的理解

    typedef char TCHAR ;    现在开始讨论字符串文字中的L问题.如果定义了_UNICODE标识符,那么一个称作__T的宏就定义如下: #define __T(x) L##x    这 ...

  6. string、wstring、cstring、 char、 tchar、int转换方法

    1.string转wstring ? 1 2 3 4 5 6 7 wstring s2ws(const string& s) {  _bstr_t t = s.c_str();  wchar_ ...

  7. VC char和TCHAR之间转换

    char:计算机编程语言(c.c++.Java.VFP等)中可容纳单个字符的一种基本数据类型. TCHAR:为了满足Unicode编码,对char的扩展,即_T("str")表示T ...

  8. char*,wchar_t*,CString和BSTR之间的转换

    前言 本文并不尝试列举出所有的转换方法,只列举作者认为方便易用的方法. 1.char*和wchar_t*的相互转换 可以利用中间类_bstr_t(头文件comdef.h)方便的进行相互转换 const ...

  9. TCHAR * 转为char *   和 char  * 转为 TCHAR *

    转码(常用类型和字符转换)转码(常用类型和字符转换) TCHAR * 转为char * char* TCHARToChar(const TCHAR* pTchar) {char* pChar = NU ...

最新文章

  1. 基于先验时间一致性车道线的IPM相机外参标定
  2. 我所遇到的C++连接问题汇总
  3. linux lvs公网ip,Linux集群架构(2)LVS介绍、LVS的调度算法、NAT模式搭建、 DR模式、keepalive...
  4. java怎样访问servlet_如何访问URL并从java servlet获取响应?
  5. 10个简单步骤,完全理解SQL
  6. 官方文档---ubuntu 安装OpenStack
  7. 2019-4(2)-数据挖掘学习笔记
  8. 吴恩达教授机器学习课程笔记【九】- k均值聚类算法
  9. 十大常用机器学习算法总结(持续完善)
  10. HBase 下载地址
  11. 为什么苏联打下了如此强的数学基础,俄罗斯却至今无法成为AI强国?
  12. 计算机三级要英语词汇,大学英语三级常考词汇
  13. 用python在树莓派上编程,你可以将项目扩展到令人难以置信的规模
  14. 微型计算机常用显示器,专业显示器只买某卓?那是你没见识过这款专业显示器的厉害...
  15. 计算机 中职生学情分析,信息技术学情分析
  16. 注意力机制在NLP问题中的介绍与调查-论文翻译
  17. Android 指纹相关调研
  18. android中用名字删除,安卓手机文件名详解~~~让你了解每个文件的作用,放心删除无用文件...
  19. 怎么把安卓手机便签小工具添加到手机桌面显示呢?
  20. DataStage简介

热门文章

  1. VUE值$refs的使用
  2. 盘面,磁道,柱面,扇区
  3. 16.BOOTP:引导程序协议
  4. Node安装,改变npm全局默认C盘安装路径
  5. 到底什么是“信创”? 它为什么会火?
  6. android压感补充
  7. Linux 命令之 aptitude -- APT 软件包管理工具
  8. dpdk内存管理——内存初始化
  9. 林清轩官宣全新品牌代言人杨祐宁
  10. Redission 最常用的可重入锁(Reentrant Lock)