CString是windows的字符串,有時候它的轉(zhuǎn)換讓人咬牙切齒,很多MFC的接口都涉及到字符串的轉(zhuǎn)換,更可恨的是還涉及到字節(jié)編碼的轉(zhuǎn)換,所有兩者導致轉(zhuǎn)換很多種情況,新手可能今天轉(zhuǎn)換成功,下次同樣的方法卻轉(zhuǎn)換不成功,而許多MFC接口是字符串輸入不對很難輸出正確的結(jié)果的。
Unicode下CString轉(zhuǎn)換為char *
CString轉(zhuǎn)換成char*有很多種方法,以下是三種常見的
但是這個只局限于寬字節(jié)Unicode的情況,在窄字節(jié)和多字節(jié)的情況下不行的,所以一般情況下還涉及多字節(jié)編碼轉(zhuǎn)換,這就是比較頭疼的問題。一般情況下,Unicode轉(zhuǎn)為多字節(jié)可以用以下方法
聰明的你會發(fā)現(xiàn),這里面涉及到內(nèi)存的拷貝,以及字符串長度的計算,特別的在最后一個字符要賦值為0.這才是成功的。所以可以總結(jié)為以下步驟
當然也有更快更簡便的方法,那就是使用T2A,W2A,這兩個簡潔的函數(shù)簡直就是神器,可以輕松的幫你完成你想要的功能。
Unicode下char *轉(zhuǎn)換為CString
這個轉(zhuǎn)換就是一個逆轉(zhuǎn)換,同樣涉及到字節(jié)長度的計算
當然windows也封裝了同樣的接口
還有我們更頻繁使用的宏
看起來還是比較復雜的。
一般情況下,windows開發(fā)工程師要保持對字符串轉(zhuǎn)換和字節(jié)編碼的敏感性,大部分的mfc windows api都是要求比較多,在qt下編程也如是,只是在QT下面給了更多轉(zhuǎn)換的接口。
LPWSTR、LPCSTR、LPCWSTR這三個你肯定不陌生吧。
LPCSTR是Win32和VC++所使用的一種字符串數(shù)據(jù)類型。LPCSTR被定義成是一個指向以'\0'結(jié)尾的常量字符的指針。
LPWSTR是wchar_t字符串
LPCWSTR是一個指向unicode編碼字符串的32位指針,所指向字符串是wchar型,而不是char型。
LPSTR和LPWSTR是Win32和VC++所使用的一種字符串數(shù)據(jù)類型。LPSTR被定義成是一個指向以NULL(‘\0’)結(jié)尾的32位ANSI字符數(shù)組指針,而LPWSTR是一個指向以NULL結(jié)尾的64位雙字節(jié)字符數(shù)組指針。這些都很迷,如果沒有一定的經(jīng)驗,多做幾次轉(zhuǎn)換,是很難孰能生巧,饒是我編程多年,一碰到總要百度一下。
當然啦,如果你嫌麻煩,只要記住那幾個三個字母的函數(shù)就可以啦,T2A,W2A,T2A,T2W.