轉換類型
char vs wchar_t
使用函數
_makepath _wmakepath
_fullpath _wfullpath
_splitpath _wsplitpath
轉換方法
MultiByteToWideChar
WideCharToMultiByte
一、其它數據類型轉換爲字符串
- 短整型(int)
itoa(i,temp,10);///將i轉換爲字符串放入temp中,最後一個數字表示十進制
itoa(i,temp,2); ///按二進制方式轉換 - 長整型(long)
ltoa(l,temp,10); - 浮點數(float,double)
用fcvt可以完成轉換,這是MSDN中的例子:
int decimal, sign;
char *buffer;
double source = 3.1415926535;
buffer = _fcvt( source, 7, &decimal, &sign );
運行結果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0
decimal表示小數點的位置,sign表示符號:0爲正數,1爲負數 - CString變量
str = "2008北京奧運";
buf = (LPSTR)(LPCTSTR)str; - BSTR變量
BSTR bstrValue = ::SysAllocString(L"程序員
");
char * buf = _com_util::ConvertBSTRToString(bstrValue);
SysFreeString(bstrValue);
AfxMessageBox(buf);
delete(buf); - CComBSTR變量
CComBSTR bstrVar("test");
char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str);
AfxMessageBox(buf);
delete(buf); - _bstr_t變量
_bstr_t類型是對BSTR的封裝
,因爲已經重載了=操作符,所以很容易使用
_bstr_t bstrVar("test");
const char *buf = bstrVar;///不要修改buf中的內容
AfxMessageBox(buf); - 通用方法(針對非COM數據類型)
用sprintf完成轉換char buffer[200]; char c = '1'; int i = 35; long j = 1000; float f = 1.7320534f; sprintf( buffer, "%c",c); sprintf( buffer, "%d",i); sprintf( buffer, "%d",j); sprintf( buffer, "%f",f);
二、字符串轉換爲其它數據類型
strcpy(temp,"123"); - 短整型(int)
i = atoi(temp); - 長整型(long)
l = atol(temp); - 浮點(double)
d = atof(temp);
- CString變量
CString name = temp; - BSTR變量
BSTR bstrValue = ::SysAllocString(L"程序員");
...///完成對bstrValue的使用
SysFreeString(bstrValue);
- CComBSTR變量
CComBSTR類型變量可以直接賦值
CComBSTR bstrVar1("test");
CComBSTR bstrVar2(temp); - _bstr_t變量
_bstr_t類型的變量可以直接賦值
_bstr_t bstrVar1("test");
_bstr_t bstrVar2(temp);
三、其它數據類型轉換到CString
使用CString的成員函數Format來轉換,例如:
- 整數(int)
str.Format("%d",i); - 浮點數(float)
str.Format("%f",i); - 字符串指針(char *)等已經被CString構造函數支持的數據類型可以直接賦值
str = username; - 對於Format所不支持的數據類型,可以通過上面所說的關於其它數據類型轉化到char *的方法先轉到char *,然後賦值給CString變量。
四、BSTR、_bstr_t與CComBSTR
- CComBSTR 是ATL
對BSTR的封裝,_bstr_t是C++對BSTR的封裝,BSTR是32位指針,但並不直直指向字串的緩衝區。
char *轉換到BSTR可以這樣:
BSTR b=_com_util::ConvertStringToBSTR("數據");///使用前需要加上comutil.h和comsupp.lib
SysFreeString(bstrValue);
反之可以使用
char *p=_com_util::ConvertBSTRToString(b);
delete p;
具體可以參考一,二段落裏的具體說明。
CComBSTR與_bstr_t對大量的操作符進行了重載,可以直接進行=,!=,==等操作,所以使用非常方便。
特別是_bstr_t,建議大家使用它。