1. 程式人生 > >c++ 字元型別轉換

c++ 字元型別轉換

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(constchar*string);
              _int64 _atoi64(
constchar*string)

              
int wtoi(const wchar_t*string);
              int64 wtoi64(
const wchar_t*string);
              
long atol(constchar*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 stringint 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