從VC6.0轉到VS2008開發,還算問題不大,但VS2008預設使用Unicode字元
集,而VC6.0使用MBCS字元集,所以在處理字串時令人比較頭疼,比如
如果需要得到使用者輸入控制項中的浮點數據怎麼辦?一種辦法
CString --> char* --> atof
意思是先從控制項上得到字串,使用Control.GetWindowText()函數即可,
最後使用atof(char*)將char*轉換為浮點型,但如何從CString轉換成char*呢?
在VC6.0中我們可以這樣做
CString str = _T("123.45");float f = atof(str);
但在VS2008下會報錯
“atof”: 不能將參數 1 從“CString”轉換為“const char *”
這是為什嗎?
VC6.0下CString通過重載的LPCTSTR可以轉換為char*,且CString在VC6.0下
預設是MBCS編碼,所以沒問題。但VS2008下CString是Unicode編碼,所以無法
直接從雙位元組的Unicode轉換為MBCS的char*,故報錯。
Unicode與MBCS如何相互轉換,可以用MultiByteToWideChar,WideCharToMultiByte
來轉換,自己寫個轉換函式。下面有比較簡單的方法,看代碼
USES_CONVERSION;CString str = _T("123.45");float f = atof(T2A(str));
上面用了一個USES_CONVERSION宏和T2A函數就完成了轉換,或者可以認為是
T2A完成了從CString到char*的轉換,與T2A類似的函數還有
T2A T2W T2CA T2CW W2A W2CA W2T W2CT A2W A2CW A2T A2CT
關於這些宏的詳細的資訊可以參考下邊這篇文章
http://www.cnblogs.com/wind-net/archive/2012/10/31/2746995.html