VC中的字符串【转】

来源:互联网 发布:苹果电影下载软件 编辑:程序博客网 时间:2024/05/22 09:44


VC中的字符串【转】

转自:http://www.leoyee.com/blog/
初学VC的时候经常被VC里头的各种字符串定义搞糊涂了,没办法的时候就直接使用CString了反正,这个类总能处理的。后来随着用得多了,渐渐 得明白过来,那些字符串设置还是蛮有道理的。

先来看看最简单的:
CHAR
这个类型是最简单的字符串了,就是一个字节表示一个字符的那种,不过你可别小看它,先弄懂它别的就好说了。接下来我们看看它的两个”变种”

LPSTR
在VC里头这个字符串实际上就是CHAR*,注意如果你把它作为参数传给某个函数的话,就表示它所代表的字符串可以被函数改变。这一点很重要,也就是说 LPSTR可以作为传出参数[in]使用。

LPCSTR
在VC里头这个字符串表示const CHAR*,也就是说它是个常量,如果作为参数传递个函数,它所表示的字符串的值是不能变的,也就是说它只能作为传 入[out]参数使用。

请认真比较上面的一些区别,在下面的字符串中,几乎都是这样划分的。

WCHAR
这个比较容易理解,就是使用两个字节表示一个字符的那种,如果咱们把项目定义为UNICODE的话,所有字符串都是这个了。同样的它也有两个变形LPWSTRLPCWSTR

TCHAR
这个字符串最经常使用。为什么呢?因为VC为了大家的方便,比如你想把项目从ANSI(单字节)改为UNICODE(双字节),如果你用的是TCHAR那 么就不用着急了。VC会自动为你转换。
说到底TCHAR就是你在没有定义项目是UNICODE之前它就是了CHAR,否则它就是WCHAR。就这么简单。
现在就不能理解LPTSTRLPCTSTR是什么意思了吧。

VC中常用的字符串有四种:CHAR, TCHAR, WCHAR, BSTR那么它们之间如何转换呢?

本来这个问题很麻烦,幸好VC为我们提供了现成的函数。先来看看从CHAR到TCHAR
就是这个函数了
CA2T(CHAR*, TCHAR*)
大家来看这里A代表CHAR类型的,T代表TCHAR类型的。
如果要从CHAR转换到LPCTSTR那么就是
CA2CT(CHAR*, LPCTSTR)
你一定已经看出规律了A和T,不用解释了。这里的C代表const记得上次我们说过LPCTSTR就是const TCHAR*哦。现在你一定都明白了。

按照这个规律,我们只要知道四种字符串的”代号”就可以在它们之间自由的做转换了。下面就是他们的代号。
CHAR    — A
TCHAR  — T
BSTR    — OLE
WCHAR — W
const    — C

实际上在ATL 7.0中,可以使用下面的宏来处理字符串转换问题:

CSourceType2[C]DestinationType[EX]

SourceType和DestinationType就是上面说到的类型。比如我们这么写 CA2T, CA2W, CW2T, CW2A等等

下面是一个字符串转换的例子。

#include “atlstr.h”
void func( LPSTR lpsz )
{

LPWSTR x = CA2W(lpsz)

// do something with x

}

0 0