TCHAR,WCHAR,LPSTR,LPWSTR和LPCTSTR
来源:互联网 发布:国泰安数据库 编辑:程序博客网 时间:2024/05/17 03:46
转自:http://wuyuans.com/2012/09/tcharwcharlpstrlpwstr-and-lpctstr/
从现在开始要进入嵌入式的开发了,复习一下c语言,先从基本的数据类型开始。TCHAR,WCHAR,LPSTR,LPWSTR和LPCTSTR,这几个看起来差不多,也很容易混淆,他们都是跟字符有密切关系的。要想知道他们的由来以及作用就必须先了解字符的编码。
0.字符编码
在操作系统里面一般使用两种编码: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定义字符,让系统来判断长度吧。
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等都可以这么解释。
- TCHAR,WCHAR,LPSTR,LPWSTR和LPCTSTR
- TCHAR,WCHAR,LPSTR,LPWSTR和LPCTSTR
- What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR
- TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR区别
- What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR
- TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR<一>
- TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR<二>
- TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR<三>
- What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?
- windows编程中的char, TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR区别
- VC++中关于TCHAR,WCHAR,LPSTR,LPWSTR,LPCTSTR的解释
- What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?
- What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?
- TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR 之间的联系与区别
- TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR 之间的联系与区别
- What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?
- What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?
- TCHAR,WCHAR,LPSTR,LPWSTR,LPCSTR的区别
- mysql中char与varchar的区别分析
- The source files "*\A.cpp " and "*\A.cpp " are both configured to produce the output file "*\A.obj "
- iframe加载完毕事件
- Sql Server 跨服务器连接
- Git常用命令解说 [robby certification]
- TCHAR,WCHAR,LPSTR,LPWSTR和LPCTSTR
- 帮助你生成超酷计时器和时钟效果的jQuery插件 - FlipClock.js
- 深度优先还是广度优先
- TQ2440-U-BOOT-1.1.6启动流程及常用功能浅析
- Ashampoo® Snap 4 截图工具 + 有效注册码
- android listview获取选中项
- hibernate自动生产hbm.xml文件
- appid 和证书匹配
- c语言中常用数据类型的字节数