欢迎来到天天文库
浏览记录
ID:8973864
大小:44.00 KB
页数:5页
时间:2018-04-13
《vc中各种字符串含义和转换大全》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、vc++中各种字符串含义和转换大全2012年03月31日整理第一章各种字符串类型的定义、区别和含义CString,BSTR,LPCTSTR之间关系和区别CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。CString是一个完全独立的类,动态的TCHAR数组,封装了+等操作符和字符串操作方法。typedefOLECHARFAR*BSTR;typedefconstchar*LPCTSTR;BSTR是为了与原先的basic字符兼容。主要用来和VB打交道的(V
2、B里的string就是指它)。一个BSTR由头部和字符串组成,头部4字节包含串长信息,串中可以包含嵌入的null值。这种带长度前缀的字符串,主要由操作系统来管理的,所以要用api.操作它的API函数很多,如SysAllocString,SysFreeString等.vc里封装它的类如_bstr_t,及ATL中的CComBSTR等.BSTR是以指针的形式进行传递的。BSTR是Unicode的,即每个字符需要两个字节。BSTR通常以两字节的null字符结束。vc++中各种字符串的表示法首先char*是指向ANSI字符数组的指针,其中每个字符占据8位
3、(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。LP的含义是长指针(longpointer)。LPSTR是一个指向以‘ ’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。1.LP表示长指针,在win16下有长指针(LP)和短指针(P)的区别,而在win32下是没有区别的,都是32位.所以这里的LP和P是等价的.2.C表示con
4、st3.T是什么东西呢,我们知道TCHAR在采用Unicode方式编译时是wchar_t,在普通时编译成char.T表示在Win32环境中,有一个_T宏这个宏用来表示你的字符是否使用UNICODE,如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(
5、类型为wchar_t)是一种被鼓励的做法。常量字符串ansi和unicode的区分是由宏_T来决定的。但是用_T("abcd")时,字符串"abcd"就会根据编译时的是否定义_UNICODE来决定是char*还是w_char*。同样,TCHAR也是相同目的字符宏。看看定义就明白了。简单起见,下面只介绍ansi的情况,unicode可以类推。_T一般同字常数相关,如_T("Hello"。如果你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。_T和_
6、L的区别在于,_L不管你是以什么方式编译,一律UNICODE方式保存.T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不明确表示使用MBCS,也不明确表示使用UNICODE。那到底使用哪种字符集编译的时候才决定。STR表示这个变量是一个字符串LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。然后为了实现两种编码的通用,提出了TCHAR的定义:如果定义_UNICODE,声明如下:type
7、defwchar_tTCHAR;如果没有定义_UNICODE,则声明如下:typedefcharTCHAR;LPTSTR和LPCTSTR中的含义就是每个字符是这样的TCHAR。CString类中的字符就是被声明为TCHAR类型的,它提供了一个封装好的类供用户方便地使用。CString和LPCTSTR可以说通用。原因在于CString定义的自动类型转换,没什么奇特的,最简单的C++操作符重载而已。LPCTSTR: #ifdef_UNICODE typedefconstwchar_t*LPCTSTR; #e
8、lse typedefconstchar*LPCTSTR; #endif所以LPCTSTR就表示一个指向常固定地址的可以
此文档下载收益归作者所有