歡迎來(lái)到 常識(shí)詞典網(wǎng) , 一個(gè)專業(yè)的常識(shí)知識(shí)學(xué)習(xí)網(wǎng)站!
[ Ctrl + D 鍵 ]收藏本站
答案 1:
先記最原始的 ANSI 字符串 LPSTR, 被定義成 c-ar *.LPCSTR 比 LPSTR 多了個(gè) C, 意思是 const, 所以 LPCSTR 是 const c-ar *.后來(lái) XP 后 微軟又把所有 API 增加了 Unicode 版本(實(shí)際是重新開發(fā)), 于是在 LPSTR 基礎(chǔ)上加了個(gè) W ,即 LPWSTR, 被定義成 wc-at_t.同理 LPCWSTR 被定義成 const wc-ar_t *.可是怎么兼容 以前的 ANSI 版本的 API 呢? 微軟用 帶 T 的宏 來(lái)解決的。如果 定義了Unicode那么 TCHAR 被定義成 WCHAR (就是 wc-ar_t) LPTSTR 被定義成 LPWSTR (wc-ar_t *) LPCTSTR 被定義成 LPCWSTR (const wc-ar_t *)否則 /* 那就是用了 ANSI 版本了 */ TCHAR 被定義成 CHAR (就是 c-ar 了) LPTSTR 被定義成 LPSTR (c-ar *) LPCTSTR 被定義成 LPCSTR (const c-ar *)對(duì)應(yīng)的,實(shí)際的函數(shù)名 以 A 結(jié)尾的 對(duì)應(yīng) ANSI 版本,而以 W 結(jié)尾的 對(duì)應(yīng)的 Unicode 版本.(其實(shí) ANSI 版本現(xiàn)在都是 將參數(shù)先轉(zhuǎn)成 寬字符,再調(diào)用 Unicode 版本)比如 MessageBoxA 和 MessageBoxW最后我們用的 MessageBox, 其實(shí)也是宏:如果 定義了Unicode那么 MessageBox 就是 MessageBoxW否則 MessageBox 就是 MessageBoxA在平時(shí)的時(shí)候,c-ar * 與 const c-ar * 之間的顯式轉(zhuǎn)換很少, 即使用到也很容易轉(zhuǎn).偶爾麻煩的就是 ANSI 和 Unicode 之間的轉(zhuǎn)換,有倆API:Unicode- > ANSI: WideC-arToMultiByteANSI- > Unicode: MultiByteToWideC-ar說真的,這倆 API 若是頻繁用到,看定義都麻煩. 所以最好自己稍微做封裝一下. 以后直接用自己封轉(zhuǎn)后的版本就好了.答案 2:
WCHAR.H中:typedef unsigned s-ort wc-ar_t;WINNT.H 中typedef c-ar CHAR;typedef wc-ar_t WCHAR;typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, *PSTR;typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR;數(shù)據(jù)類型中有L,N指的是near和long,有P指的是指針,有C指的是有const修飾,有W指的是寬字符。有UNICODE標(biāo)識(shí)符情況下:typeddef WCHAR TCHAR, * PTCHAR;typeddef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR;typeddef LPCWSTR LPCTSTR;答案 3:
我想說的,前面的幾位都已經(jīng)說得七七八八了,其實(shí)主要是ANSI和UNICODE兩類,但形式上,也可以分標(biāo)準(zhǔn)C/C++和windows api兩類。你上面列出的,一種是C/C++里面的,如c-ar*、const c-ar*之類,一種是windows api里面的,如LPSTR,LPCTSTR之類的,這些是微軟通過宏定義幫前面的c-ar*、const c-ar*等類型起了一個(gè)新的名字而已,實(shí)質(zhì)和前面的一樣。當(dāng)你用到他們時(shí),你可以當(dāng)光標(biāo)放到這些類型上,然后F12就可以看到他的原貌了。還有CString這些是MFC,ATL里面的,CString是一個(gè)類,類也是一種類型。除了上面你列出的那些,其實(shí)還有針對(duì)COM的字符串類型、、、答案 4:
const是修飾符,其轉(zhuǎn)換參考C++對(duì)const的規(guī)定;LPSTR, LPCSTR等是宏,其實(shí)都可以推算到c-ar*, const c-ar* 或者 wc-ar_t*, const wc-ar_t*等實(shí)際類型除去這些,Windows下VC++中的字符串類型基本就是:c-ar *, wc-ar_t*,_bstr_t, CComBSTR, CString, basic_string, System.String.MSDN很好的總結(jié)了這些字符串之間的轉(zhuǎn)換:msdn.microsoft/en-US...答案 5:
對(duì)c標(biāo)準(zhǔn),c++標(biāo)準(zhǔn)以外的類型無(wú)視。答案 6:
沒必要全記住,用的時(shí)候現(xiàn)查msdn也來(lái)得及答案 7:
現(xiàn)用現(xiàn)查答案 8:
沒刻意記過,用的時(shí)候不會(huì)就查;用的多了自然而然就記住了答案 9:
用多了就記住了下一篇:像 “如果云” 這樣山寨 ifttt 網(wǎng)站有前景嗎? 下一篇 【方向鍵 ( → )下一篇】
上一篇:幸福和開心區(qū)別是什么? 上一篇 【方向鍵 ( ← )上一篇】
快搜