现在C++的字符分成两种类型wchar_t和char。  
其中   WCHAR==wchar_t,CHAR==char。  
TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char。

CHAR实施上就是unsigned char,
WCHAR为宽字符,
而TCHAR根据是否支持unicode而不同。
在程序使用sizeof(TCAHR),当默认设置时,这个值是1;
当定义UNICODE宏时,这个值是2。

WCHAR,CHAR,TCHAR的关系实际上是这样的  
   
#ifdef   UNICODE    
          typedef   wchar_t   TCHAR;    
#else    
          typedef   unsigned   char   TCHAR;    
#endif    
     
typedef   unsigned   char   CHAR;    
typedef   unsigned   wchar_t   WCHAR;

Windows使用两种字符集ANSI和UNICODE,

前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。

而后者是双字节方式,方便处理双字节字符。

Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。_T一般同字常数相关,如_T("Hello")。如果你编译一个程序为ANSI方式,_T实际不起任何作用。

而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。

_T()和_L()的区别在于,_L不管你是以什么方式编译,一律以以 UNICODE方式保存。

Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。

如果将来你不打算升级到unicode,那么也不需要_T,

unicode,第个字符使用2个字节,包含了世界上几乎所有语言,每种语言的每一个字符在unicode里的值都是惟一的。

ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。标准 ASCII 码也叫基础ASCII码,使用 7 位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符。不能适用于多语言平台。

ANSI

为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。

不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。

  不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。

WCHAR,CHAR,TCHAR的区别相关推荐

  1. VC++ WCHAR,CHAR,TCHAR的区别

    C++的字符分成两种类型wchar_t和char.   其中   WCHAR==wchar_t,CHAR==char.   TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char. ...

  2. char,TCHAR,WCHAR区别

    #ifdef   UNICODE                typedef   wchar_t   TCHAR; #else                typedef   unsigned   ...

  3. VC中char,TCHAR,WCHAR总结

    char,TCHAR,WCHAR区别 #ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned char TCHAR; #endif t ...

  4. [转]VC中char,TCHAR,WCHAR总结

    char,TCHAR,WCHAR区别 #ifdef   UNICODE      typedef   wchar_t   TCHAR; #else      typedef   unsigned   ...

  5. char和uchar区别

    char和uchar区别 char 是有符号的, uchar(unsigned char)是无符号的! 1.作为字符来表示的话,两者没有什么区别! 2.作为整数来表示的话,由于char是有符号的,于是 ...

  6. 数据库中的字段varchar类型和char类型的区别?

    数据库中的字段varchar类型和char类型的区别? 目录 数据库中的字段varchar类型和char类型的区别?

  7. char str[]与char *str的区别

    一个具体例子: main() {char *p="abc123ABC";//char p[]="abc123ABC"int i=0;while(*(p+i)!= ...

  8. char[]数组与char *指针的区别

    char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...

  9. char s[] 和 char *s 的区别

    第一种: char *a 与char a[] 的区别 char *d = "hello" 中的a是指向第一个字符'a'的一个指针:char s[20] = "hello& ...

最新文章

  1. mq系列传感器的程序_消息中间件(一)MQ详解及四大MQ比较
  2. 因子分析累计方差贡献率要在多少_R语言进阶之因子分析
  3. EF批量插入太慢?那是你的姿势不对
  4. css怎么控制两个字母,css英文字母数字自动换行且不断词方法
  5. office 安装错误 1920 osppsvc服务无法启动 failed to start
  6. 微型计算机突然断电什么信息全部都是,微型计算机的硬件组成阶段作业(函授2014春).doc...
  7. Arrays 工具类
  8. rw1601可以用C语言写程序吗,用8051+1601LCD设计的整型计算器讲解.doc
  9. mysql的Innodb为什么使用B+树
  10. 一段简单的代码告诉你什么叫内存溢出
  11. Java多线程学习十七:读锁应该插队吗?什么是读写锁的升降级?
  12. python时间显示_python脚本之日期格式显示
  13. hihocoder第229周:最大连续字母个数
  14. window 自动安装MySQL数据库_windows安装MySQL数据库
  15. linux 下 安装 node.js 详细步骤
  16. vue-resource 和 axios的区别
  17. matlab fft 基波,fft 谐波分析_matlab fft频谱分析_傅里叶变换谐波分析
  18. STM32——电容触摸按键实验
  19. Excel导入导出之easypoi用法
  20. html thead作用,HTML thead 标签定义和用法详细介绍

热门文章

  1. CentOS7安装配置redis5.0.5
  2. 尚学linux课程---8、rpm软件包安装
  3. 学习opencv(1)
  4. LeetCode——16. 3Sum Closest
  5. PHP5各个版本的新功能和新特性总结
  6. 图像缩放的双线性内插值算法的原理解析
  7. 다양한 저장매체의 속도를 측정
  8. 彻底的卸载SQL Server2005
  9. 洛谷P3763 [Tjoi2017]DNA 【后缀数组】
  10. Linux - 系统资源