您的位置:首页 > 其它

VC中类型的相互转化

2013-10-05 11:53 393 查看

一,VC中字符串类型的互相转换

总是觉得VC中的类型纷繁复杂,扑朔迷离。因为有了Unicode,因为C、C++类型相互转化如此不同。保存char的不止char一种,还可以用short,unsigned
short,int 等来保存。单单就字符串就有N多种类型,其它类型也不止一个。再加上C++中本来就没有正式的string类型,所以,平常就会碰到很多种相同意思,但不同类型,或相同类型,不同写法的Type.

如何在他们之间相互转化,也是在学习VC中避免不了的一个问题。

 

现来看平时常用的保存字符串的类型有那些?

Cstring、TCHAR*、 TCHAR[]、 char*、 LPCSTR、
LPCTSTR、 LPBYTE

以上都是在VC中用的比较多得。他们之间如何转化:

这里,把Cstring看作一个转换的中间值,任何类型都是相它看齐。

1.      LPCSTR
ßàCstring

LPCSTR在VC中代表的是char*」但并不能用char*的方式去转换它。它与Cstring可以直接互换,就像以下代码这样:


Cstring strHello;


strHello=”Hello world”;


LPCSTR lpStr=(LPCSTR)strHello;


Cstring str2;


str2=(CString)lpStr;



另外,Cstring类有一成员函数Format,可以用来把类型转换成Cstring类型,以上lpStr转换成Cstring可以这样表示:


str2.Format(“%s”,lpStr);

2.      LPCTSTRßàCstring
LPCTSTR和LPCSTR转换方式是一样的,所不同的是两个类型本身不一样。LPCTSTR表示的是unsigned short*,这样,它可以支持Unicode字符类型,而LPCSTR只支持ANSI字符类型。平常,我们一般可以用LPCTSTR来代替LPCSTR。

3.      TCHAR*(char*)ßàCstring
TCHAR在VC中表示的是unsigned short,可以支持Unicode字符集。两类型之间的转换可以像以下这样


TCHAR* myChars = strHello.GetBuffer(strHello.GetLength());


str2=(CString)myChars; //或者str2.Format(“%s”,myChars);



   注意:Cstring转TCHAR*不能用以下代码转换:


myChars = (LPCTSTR)strHello; //Error,Can not Convert from ‘const char*’ to ‘char*’



   也不能这样转化:


myChars=(LPTSTR)strHello; //Cstring不能转化为char*

但是可以这样: 


myChars=(LPTSTR)(LPCTSTR)strHello; //先把strHello转化为const char*,再转化为char*



4.      LPBYTEßàCstring
LPBYTE是unsigned char*类型,它们之间的转换如下:


LPBYTE lpByte = (LPBYTE)strHello.GetBuffer(strHello.GetL
4000
ength());

//GetBuffer返回的是LPTSTR类型
//也可以这样转换:

5.      TCHAR[]ßàCstring

它们之间的转换又不一样,因为涉及到数组。所以用strcpy函数来进行,strCpy的函数原型如下:
LPTSTR StrCpy(LPTSTR psz1,LPCTSTR )
它们之间的转换如下: 


CHAR strChar[200]


StrCpy(strChar,(LPCTSTR)strHello);


Cstring str2 = (CString)strChar; //或者用Format函数



 

 

由此可见,Cstring转换到别的类型,都要转成LPCSTR或者LPCTSTR类型这一关(LPCSTR,LPCTSTR代表了const
char* , const short*)。然后再通过LPCSTR或LPCTSTR转换成别的类型(包括unsigned char*,char*),所以,要把Cstring转换成其它类型,首先看这个类型是不是const
char* 或者const short*,如果是,可以直接转,如果不是,首先转成LPCSTR或LPCTSTR,再把它们强制转换成相应的字符串类型.

 

              而任何类型转换成Cstring,则需要在前面加上(CString)强制转换即可,或者用Cstring类的成员函数Format

 

 

二.VC中其它常用类型转换

              其中,很多函数都用到<stdlib.h>和<wchar.h>,如果用到,要把头文件包含进源文件.

              1.字符串转换成其它类型

              


              Double atof(char* string);




              Double wtof(const wchar_t* string);


              int atoi(const char* string);


              _int64 _atoi64(const char* string)




              int wtoi(const wchar_t* string);


              int64 wtoi64(const wchar_t* string);


              long atol(const char* string);


              long wtol(const wchar_t* string);





 

              举例:


              char* s=”-2309.12E-15”;


              double x=atof(s);   //out:-2309120E-012


              s=”-9885 pigs”;


              int I=atoi(s);              //out:-9885
 

 

 

              2.其它类型转换成字符型:


              char* itoa(int value,char* string,int radix);


              char* i64toa(int64 value,char* string,int radix);


              char* ui64toa(unsigned int64 value,char* string,int radix);


              wchar_t * itow(int value, wchar_t string, int radix);


              char* _ltoa(long value,char* string,int radix);

             

              举例:


              int i=100;


              itoa(i,temp,10); //十进制


              itoa(i,temp,2); //二进制




              




              Cstring str;




              Str.Fomat(“%d”,i); //整型to Cstring


              Str.Format(“%f”,f); //Float to CString
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: