1、首先,char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。

2、wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式,wchar_t类型主要用在国际化程序的实现中,但它不等同于unicode编码。unicode编码的字符一般以wchar_t类型存储。

3、wchar_t数据类型一般为16位或32位,但不同的C或C++库有不同的规定,如GNU Libc规定wchar_t为32位[1],总之,wchar_t所能表示的字符数远超char型。标准C++中的wprintf()函数以及iostream类库中的类和对象能提供wchar_t宽字符类型的相关操作。

int main() {wchar_t wStr[] = L"这是一段中文";wcout<<wStr<<endl;getchar();getchar();return 0;
}

可以用TEXT()方法将char转换成wchar_t
例如: wchar_t appName[5]=TEXT(“test”);
方法2:

wchar_t* c2w(const char *str)
{int length = strlen(str)+1;
wchar_t *t = (wchar_t*)malloc(sizeof(wchar_t)*length);
memset(t,0,length*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP,0,str,strlen(str),t,length);
return t;
}

4、TCHAR

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

微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数
为了存储这样的通用字符,就有了TCHAR:

当没有定义_UNICODE宏时,TCHAR = char,_tcslen =strlen
当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wcslen[1]

#ifdef UNICODEtypedef wchar_t TCHAR;
#elsetypedef char TCHAR;
#endif

当我们定义了UNICODE宏,就相当于告诉了编译器:我准备采用UNICODE版本。这个时候,TCHAR就会摇身一变,变成了wchar_t。而未定义UNICODE宏时,TCHAR摇身一变,变成了unsignedchar。这样就可以很好的切换宽窄字符集。
tchar可用于双字节字符串,使程序可以用于中日韩等国 语言文字处理、显示。使编程方法简化。

5、_T("")是一个宏,定义于tchar.h下。

#define __T(x) L ## x
#define _T(x) __T(x)

他的作用是让你的程序支持Unicode编码,因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理像中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。如果你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存。
LPSTR:32bit指针指向一个字符串,每个字符占1字节
LPCSTR:32-bit指针指向一个常字符串,每个字符占1字节
LPCTSTR:32-bit指针指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义
LPTSTR:32-bit指针每字符可能占1字节或2字节,取决于Unicode是否定义
L是表示字符串资源为Unicode的。
比如
wchar_tStr[] = L"Hello World!";
这个就是双字节存储字符了。
_T是一个适配的宏~

#ifdef _UNICODE的时候
_T就是L
没有#ifdef _UNICODE的时候
_T就是ANSI的。

#ifdef UNICODEtypedef wchar_t TCHAR;
#elsetypedef char TCHAR;
#endif

C++字符类型TCHAR、char和wchar_t相关推荐

  1. 通过char与varchar的区别,学习可变长的字符类型

    转自http://www.uphtm.com/database/232.html 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  2. Java之字符类型char

    1.基本介绍 字符类型可以表示单个字符,字符类型是char,char是两个字节.多个字符我们使用字符串String. 2.字符类型使用细节 (1)字符常量是单引号(' ')括起来的单个字符.例如:ch ...

  3. html如何设置字符类型,html 空格字符类型

    1,Html中空格 不断行的空白(1个字符宽度)     半个空白(1个字符宽度)     一个空白(2个字符宽度)     窄空白(小于1个字符宽度) 2,Css 的方式空格 CSS中当 white ...

  4. Java变量_字符类型

    字符类型 1. 基本介绍 2. 字符类型使用细节 3. 字符类型的本质 3.1 字符类型的本质讨论 3.2 编码表的简单介绍 1. 基本介绍 字符类型可以表示单个字符,字符类型是char(两个字节,可 ...

  5. Java学习笔记 --- 字符类型

    一.字符类型 字符类型可以表示单个字符,字符类型是char, char是两个字节(可以存放汉字),多个字符我们用字符串String. public class Char01 {public stati ...

  6. c++ 字符类型总结区别wchar_t,char,WCHAR(转)

    1.区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数.    UNICODE:wc ...

  7. C++字符类型总结区别wchar_t,char,WCHAR

    转至:http://www.360doc.com/content/12/0807/01/9290626_228750141.shtml 1.区别wchar_t,char,WCHAR ANSI:即 ch ...

  8. c语言宽字符与wchar,浅谈c++ 字符类型总结区别wchar_t,char,WCHAR

    1.区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数. UNICODE:wchar ...

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

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

最新文章

  1. python pillow 扩展图片增强
  2. argparse--解析命令行选项、用法以及说明
  3. eslint 配置_前端代码规范配置 (一)
  4. 责任链(Chain of Responsibility Pattern)
  5. 【干货】Html与CSS入门学习笔记12-14【完】
  6. bug是什么PHP,bug是什么
  7. JavaWeb之Cookie
  8. Java基础学习总结(48)——Java 文档注释
  9. 计算机基础应用网络统考题库,2016年9月网络教育《计算机应用基础》统考模拟试题及答案 (1)...
  10. C语言实现加密解密功能 附带详细注释源码
  11. xshell使用xftp传输文件 、使用pure-ftpd搭建ftp服务
  12. Swift 委托/代理设计模式
  13. Eclipse下载与安装及汉化(详解版)
  14. 【敏捷开发模式的介绍】
  15. VS2015+Qt5.8 联合配置
  16. 【原创】Kinect for windows SDK 入门学习资源合辑
  17. 苹果新款耳机问题多 线上短暂销售仍被抢空
  18. python模拟12306购票_西甲彩经:巴塞罗那取连胜,塞维利亚不败
  19. 微信小程序生成海报中二维码-----长按识别不了问题及处理方案
  20. PS|你真的了解PS吗?

热门文章

  1. 无人机光流定位系列——(一)原理剖析
  2. 【FreeMind】简介信息
  3. 移动web之3 D转换
  4. webpack学习:性能优化
  5. 双系统下linux分区被误删的解决办法
  6. X86 汇编快速入门
  7. 【深入理解C++】拷贝构造函数
  8. 微信小程序中,需要注意ios系统的坑: 日期不识别横杠“-”符、输入框设置maxlength时,拼音也会被限制……
  9. 干货!数学与AI:AI的拓扑几何基础
  10. 以后不在这里更新博文了~