TCHAR,WCHAR,LPSTR,LPWSTR和LPCTSTR

       在操作系统里面一般使用两种编码:ansi和unicode。我们在用记事本另存为一个文件的时候可以看到这两种编码,还有其他的比如UTF-8、UTF-16和GB2312都是他们的扩展。c/c++当然也支持这两种字符编码,ansi字符用char(1字节)表示,unicode用wchart_t(2字节)表示。用""包围的是ansi字符串,前面加个L,也就是用L""包围的就是unicode字符串。比如:


    "ansi string";//ansi字符串
    L"unicode string";//unicode字符串

1.TCHAR

TCHAR其实不是数据类型,他只是c++的一个类型别名。因为ansi字符和unicode字符的长度是不一样的,ansi是1字节的,而unicode用两字节表示,但我们在写程序的时候是不知道这个程序会被用到那个字符编码的,所以在c/c++中有一个宏_UNICODE用来标识当前的字符编码。当_UNICODE被定义时,使用unicode编码,未定义使用ansi编码。再回到TCHAR,先看看他的定义:


    #ifdef _UNICODE
    typedef wchar_t TCHAR;
    #else
    typedef char TCHAR;
    #endif

这就是TCHAR的类型定义,这下应该清楚了吧。

如果是ansi编码,TCHAR就是char,一个字节;unicode的话是wchar_t,两个字节。这样我们在编写程序的时候就可以放心的用TCHAR定义字符,让系统来判断长度吧。

在这里,VC6是默认的ANSI,当然VC6也有unicode字符集的。在VS2005以上均默认是Unicode字符集了,可以更改设置。

2.WCHAR

WCHAR就是wchar_t,还有一个CHAR就是char,应该是为了写法上好看吧。

3.LPSTR,LPWSTR和LPCTSTR

他们都是单词的缩写,我们可以这样来理解:
  • L - Long(长)
  • P - Pointer(指针,也就是数组)
  • C - Constant(常量)
  • W - Wide(宽,也就是WCHAR的意思)
  • T - TCHAR(上面说过了)
  • STR - String(字符串)
于是
  • LPSTR=指向字符串的长指针=char
  • LPWSTR=指向unicode字符串的长指针=wchar_t
  • LPCTSTR=指向unicode或ansi字符串常量的长指针=const TCHAR *
你也许会问为什么要用长指针呢,也没见他怎么长啊。这是以前遗留的问题,随着现在进入32位时代,没有了短指针,但这命名还是保留了下来。还有其他类似的LPCSTR、LPCWSTR等都可以这么解释。


转载参考:

http://wuyuans.com/2012/09/tcharwcharlpstrlpwstr-and-lpctstr/



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值