VC中类型的相互转化

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

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

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

 

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

CstringTCHAR* TCHAR[] char* LPCSTR LPCTSTR LPBYTE

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

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

1.      LPCSTR ßàCstring
LPCSTRVC中代表的是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
LPCTSTRLPCSTR转换方式是一样的,所不同的是两个类型本身不一样。LPCTSTR表示的是unsigned short*,这样,它可以支持Unicode字符类型,而LPCSTR只支持ANSI字符类型。平常,我们一般可以用LPCTSTR来代替LPCSTR

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

TCHAR *  myChars  =  strHello.GetBuffer(strHello.GetLength());
str2
= (CString)myChars;  // 或者str2.Format(“%s”,myChars);

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

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
LPBYTEunsigned char*类型,它们之间的转换如下:

LPBYTE lpByte  =  (LPBYTE)strHello.GetBuffer(strHello.GetLength());


//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*)。然后再通过LPCSTRLPCTSTR转换成别的类型(包括unsigned char*,char*,所以,要把Cstring转换成其它类型,首先看这个类型是不是const char* 或者const short*,如果是,可以直接转,如果不是,首先转成LPCSTRLPCTSTR,再把它们强制转换成相应的字符串类型.

 

              而任何类型转换成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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值