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等巨集基本上不需要啦
相關文章
- c++各種字串互轉(char*、wchar_t*、CString、string、wstring、LPCWSTR)C++字串
- 神奇的JavaScript弱等價型別轉換JavaScript型別
- C++中string、char *、char[]、const char*的轉換C++
- string與char陣列相互轉換陣列
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- CAPL指令碼中常用到的資料型別轉換——數字型別(int/double)和字串型別(char array)指令碼資料型別字串
- 【python】str與json型別轉換PythonJSON型別
- 造型與強制型別轉換型別
- C++中string轉換為char*型別返回後亂碼問題C++型別
- java 基礎型別與byte[]的轉換Java型別
- char轉換成int
- 型別轉換型別
- interface{} 型別的轉換型別
- golang的型別轉換Golang型別
- MySQL資料型別操作(char與varchar)MySql資料型別
- python 與 Mysql 資料型別轉換PythonMySQL 資料型別
- 資料型別,型別轉換資料型別
- const char* 型別不能用於初始化char* 型別實體型別
- js型別轉換JS型別
- 型別轉換(cast)型別AST
- Convert型別轉換型別
- mysql bigint型別和datetime型別的轉換MySql型別
- C# 泛型中的資料型別判定與轉換C#泛型資料型別
- java中的型別轉換Java型別
- CString解析[轉]
- 重拾Kotlin(10)-型別的檢查與轉換Kotlin型別
- 【C++】CONST CHAR*型別的值不能用於初始化CHAR*型別的實體C++型別
- js日期轉換工具類(仿oracle to_char,to_date等語法)JSOracle
- Javascripit型別轉換比較那點事兒,雙等號(==)Java型別
- 【型別轉換】使用c#實現簡易的型別轉換(Emit,Expression,反射)型別C#MITExpress反射
- E0144 "const char *" 型別的值不能用於初始化 "char *" 型別的實體型別
- Java資料型別及型別轉換Java資料型別
- JNI常用型別轉換型別
- 容器,型別轉換。List。型別
- c++ 型別轉換C++型別
- 型別轉換注意點型別
- 變數型別轉換變數型別
- Spring型別轉換(Converter)Spring型別