CString和char*的互相轉(zhuǎn)換

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.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容