VC中的一些字符类型及其转换

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

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

  

二、首先看一下几种类型的定义:

 

      

  1. typedef char CHAR  
  2. typedef wchar_t WCHAR  
  3.   
  4. #ifdef UNICODE  
  5.       typedef WCHAR TCHAR  
  6. #else   
  7.       typedef char TCHAR  
  8. #endif  
  9.   
  10. typedef unsigned char BYTE;  
  11. typedef _nullterminated CONST CHARLPCSTR;  
  12. typedef CHAR *LPSTR;  
  13.   
  14. #ifdef UNICODE   
  15. typedef LPWSTR LPTSTR  
  16. #else   
  17. typedef LPSTR LPTSTR  
  18. #endif  
  19.   
  20. #ifdef UNICODE  
  21. typedef LPCWSTR LPCTSTR  
  22. #else   
  23. typedef LPCSTR LPCTSTR  
  24. #endif  
  

      P->point C->const T->W,TEXT,_T(即在UNICODE下)

三、各种类型间的转换

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

      1. LPCSTR ←→Cstring 
      有两种方法,一是强制转换,like below:

  1. Cstring strHello;  
  2. strHello="Hello world";  
  3. LPCSTR lpStr=(LPCSTR)strHello;  
  4. Cstring str2;  
  5. str2=(CString)lpStr;      
  

       使用Format,

       str2.Format("%s",lpStr);    

       2. LPCTSTR←→Cstring
       LPCTSTR和LPCSTR转换方式是一样的,平常,我们一般可以用LPCTSTR来代替LPCSTR。

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

      

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

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

       

  1. myChars = (LPCTSTR)strHello; //Error,Can not Convert from 'const char*'  to 'char*'  
     

       也不能这样转化:

       

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

       但是可以这样:

      

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

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

       

  1. LPBYTE lpByte = (LPBYTE)strHello.GetBuffer(strHello.GetLength()); //GetBuffer返回LPTSTR类型  
  
         5. TCHAR[]←→Cstring
     它们之间的转换又不一样,因为涉及到数组。所以用strcpy函数来进行,strCpy的函数原型如下:
      LPTSTR StrCpy(LPTSTR psz1,LPCTSTR )
     它们之间的转换如下:

     

  1. CHAR strChar[200]  
  2. StrCpy(strChar,(LPCTSTR)strHello);  
  3. 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);     

      举例:

      

  1. char* s="-2309.12E-15";  
  2. double x=atof(s);   //out:-2309120E-012  
  3. s="-9885 pigs";  
  4. 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);    

      举例:

      

  1. int i=100;  
  2. itoa(i,temp,10); //十进制  
  3. itoa(i,temp,2); //二进制  
  4.   
  5. Cstring str;  
  6.   
  7. Str.Fomat("%d",i); //整型to Cstring  
  8. Str.Format("%f",f); //Float to CString  
   

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值