CString與LPCWSTR、LPSTR、char*、LPWSTR等型別的轉換
CString與LPCWSTR、LPSTR、char*、LPWSTR等型別的轉換
VC++ 2010-09-25 21:23:12 閱讀457 評論3 字號:大中小 訂閱
一.CString與LPCWSTR
兩者的不同:LPCWSTR 是Unicode字串指標,初始化時串有多大,申請空間就有多大,以後存貯若超過則出現無法預料的結果,這是它與CString的不同之處。而CString是一個串類,記憶體空間類會自動管理。
CString轉換成LPCWSTR
方法一:CString strFileName;
LPCWSTR lpcwStr = strFileName.AllocSysString();
方法二:CString str=_T("TestStr");
USES_CONVERSION;
LPCWSTR lpcwStr = A2CW((LPCSTR)str);
MFC中CString和LPSTR是可以通用,其中A2CW表示(LPCSTR) -> (LPCWSTR),USER_CONVERSION表示用來定義一些中間變數,在使用ATL的轉換巨集之前必須定義該語句。
LPCWSTR轉換成CString
LPCWSTR lpcwStr = L"TestWStr";
CString str(lpcwStr);
CString str;
LPWSTR lpstr = (LPWSTR)(LPCWSTR)str;
二.CString與LPSTR轉換
CString轉換成LPSTR:
方法一:CString strFileName;
LPSTR lpStr = strFileName.GetBuffer();
strFileName.ReleaseBuffer();
方法二:CString strFileName;
LPSTR lpStr = (LPSTR)(LPCSTR)strFimeName;
LPSTR轉換成CString:
LPSTR lpStr = L"TestStr";
CString str(lpStr);
注意:CString和LPCSTR可直接轉換,如下:
CString str;
LPCSTR lpcStr = (LPCSTR)str;
三.CString和char*轉換
CString轉換成char*
方法一:CString str;
char* p = str.GetBuffer();
方法二:CString str;
char* p = (LPSTR)(LPCSTR)str;
char*轉換成CString
char* p = "test";
CString str = ("%s",p);
四.String和int、float的轉換
可以使用atoi,atof,atol等函式來完成。
五.LPSTR(char*)和LPWSTR的轉換
可以使用下面的ATL巨集來進行,最好是將變數定義成TCHAR、LPTSTR等T型別,可以避免轉換。
ATL巨集介紹:
A2BSTR OLE2A T2A W2A
A2COLE OLE2BSTR T2BSTR W2BSTR
A2CT OLE2CA T2CA W2CA
A2CW OLE2CT T2COLE W2COLE
A2OLE OLE2CW T2CW W2CT
A2T OLE2T T2OLE W2OLE
A2W OLE2W T2W W2T
A :ANSI 字串,也就是 MBCS。
W、OLE 寬字串,也就是 UNICODE。
T 中間型別T。如果定義了 _UNICODE,則T表示W;如果定義了 _MBCS,則T表示A
C const 的縮寫
利用這些巨集,可以快速的進行各種字元間的轉換。使用前必須包含標頭檔案,並且申明USER_CONVERSION;使用 ATL 轉換巨集,由於不用釋放臨時空間,所以使用起來非常方便。但是考慮到棧空間的尺寸(VC 預設2M),使用時要注意幾點:
1、只適合於進行短字串的轉換;
2、不要試圖在一個次數比較多的迴圈體內進行轉換;
3、不要試圖對字元型檔案內容進行轉換,因為檔案尺寸一般情況下是比較大的;
4、對情況 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();
void Func1(LPSTR lpStr);
void Func2(LPWSTR lpwStr);
TCHAR name[256];
TCHAR* pName = new TCHAR[256];
Func1(name); // Func1(pName);
Func2(name); // Func2(pName);
注意在VS2005中上面用紅色標記的程式碼已經不成立。
VS2005中CString已經改為寬字元型,一些轉換如下:
char name[10];
TCHAR sex[5] ;
char *p = name;
TCHAR *pw = sex;
LPSTR lpstr = name;
LPCSTR lpcstr = name;
lpcstr = lpstr;
lpstr = p;
p = (char*)sex;
pw = (WCHAR*)name;
LPWSTR lpwstr = (LPWSTR)lpstr;
lpwstr = (LPWSTR)lpcstr;
LPCWSTR lpcwstr = (LPCWSTR)lpstr;
lpcwstr = (LPCWSTR)name;
CString str(lpstr);
CString str1(lpcstr);
CString str2(lpwstr);
CString str3(lpcwstr);
CString str4(name);
CString str5(sex);
lpwstr = (LPWSTR)(LPCWSTR)str;
lpstr = (LPSTR)(LPCWSTR)str;
lpcstr = (LPCSTR)(LPCWSTR)str;
p = (char*)str.GetBuffer();
pw = str.GetBuffer();
可以看出轉換更加簡單了,基本上可以直接轉換,A2W等巨集基本上不需要啦
相關文章
- "LPWSTR" 型別的值不能用於初始化 "char *" 型別的實體型別
- CString,int,string,char*之間的轉換
- char型別的數值轉換型別
- char* 轉 LPCWSTR 解決方案
- c++各種字串互轉(char*、wchar_t*、CString、string、wstring、LPCWSTR)C++字串
- 用VC++在VS2010中的型別轉換問題(char*或string轉換成LPCWSTR)C++型別
- 不能將引數 2 從“char [8]”轉換為“LPCWSTR”
- ABAP中Char型別資料轉換成Decimal型別型別Decimal
- java型別轉換與強制型別轉換(轉)Java型別
- 神奇的JavaScript弱等價型別轉換JavaScript型別
- 日期型別與String型別的轉換型別
- 字串、數值 等型別的相互 安全轉換字串型別
- dataguard型別轉換與模式轉化型別模式
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- MySQL字元資料型別char與varchar的區別MySql字元資料型別
- PHP 型別轉換&&型別強制轉換PHP型別
- CAPL指令碼中常用到的資料型別轉換——數字型別(int/double)和字串型別(char array)指令碼資料型別字串
- 造型與強制型別轉換型別
- 字串與日期型別轉換的工具類字串型別
- MySQL資料型別操作(char與varchar)MySql資料型別
- C++中的向上型別轉換和向下型別轉換C++型別
- 型別轉換型別
- C++中string、char *、char[]、const char*的轉換C++
- python之 資料型別判定與型別轉換Python資料型別
- string與char陣列相互轉換陣列
- interface{} 型別的轉換型別
- golang的型別轉換Golang型別
- 避免使用Oracle的char型別Oracle型別
- 資料型別,型別轉換資料型別
- java 基礎型別與byte[]的轉換Java型別
- C++中string轉換為char*型別返回後亂碼問題C++型別
- Java中基本型別Array與複合型別List的互相轉換Java型別
- Oracle CHAR,VARCHAR,VARCHAR2,nvarchar型別的區別與使用Oracle型別
- char轉換成int
- javascript快速入門8--值,型別與型別轉換JavaScript型別
- C# 泛型中的資料型別判定與轉換C#泛型資料型別
- js型別轉換JS型別
- 字元型別轉換字元型別