VC中字符串類型的互相轉換

原文出處:不祥

參考url: http://www.cnblogs.com/mugua/archive/2009/03/29/1424629.html

一、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.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*)。然後再通過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
發佈了41 篇原創文章 · 獲贊 2 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章