MFC下Unicode字串與MBCS字串的轉換

來源:互聯網
上載者:User

從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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.