333
汽車大全
(轉載)WCHAR與CHAR的轉換
(轉載) WCHAR與CHAR的轉換
Windows API中很多參數是LPTSTR類型的,關於這個LPTSTR很多人都解釋過了,沒什麼好說的
#ifdef UNICODE
typedef LPWSTR LPTSTR
#else
typedef LPSTR LPTSTR
#endif
說白了,就是一個自適應的字符指針,在2005環境下當你調用某個包含 LPTSTR 參數的函數的時候,如果你試圖用一個 char* 煳弄,那就會殘忍的報錯了,怎麼辦呢,土辦法,你不要寬字符嗎,好,我轉。同理,你不憎恨寬字符嗎,我轉。
網上能找到很多關於LPSTR與LPTSTR互相轉換的帖子,不幸的是都是一個片斷,拿過來肯定不能用的。
LPSTR與LPTSTR之間的轉換方法有很多,不過我就會兩種,一個是ATL宏,還有一個是API
這裏要說一下那個ATL宏,是的,很簡單
A2W( ) W2A( )
一眼就能看明白,A表示ANSI,W表示Wide,還有好多好多,可以去MSDN查一查,多好用的宏阿,可不能白用
#include <AtlBase.h>
#include <AtlConv.h>
這兩句不能少,還有,用宏之前加一句 USES_CONVERSION ,要不然直接報錯了
用這個宏還有一個問題,當我用 new 分了一塊內存然後掉了這個宏,最後釋放的時候報錯了,怎麼辦?作為一個懶人我是不會去試圖理解那麼複雜的事的,我用數組,內存管理我不管
粗糙吧,是,不粗糙就用函數
int MultiByteToWideChar(
UINT CodePage, // code page | CP_ACP
DWORD dwFlags, // character-type options | MB_PRECOMPOSED
LPCSTR lpMultiByteStr, // string to map
int cbMultiByte, // number of bytes in string
LPWSTR lpWideCharStr, // wide-character buffer
int cchWideChar // size of buffer
);
int WideCharToMultiByte(
UINT CodePage, //code page | CP_ACP
DWORD dwFlags, //performance and mapping flags | WC_COMPOSITECHECK
LPCWSTR lpWideCharStr, //wide-character string
int cchWideChar, //number of chars in string
LPSTR lpMultiByteStr, //buffer for new string
int cbMultiByte, //size of buffer
LPCSTR lpDefaultChar, //default for unmappable chars |NULL
LPBOOL lpUsedDefaultChar //set when default char used |NULL
);
是的,排版是胡來的,能看清就行,我覺得說得夠清楚了,隻是那麼多參數讓人眼花繚亂,實在懶得去深究,所以我寫了幾個默認值,在 “|”後麵,這是對像我這樣的懶人和一些普通轉換適用的,如果某高手看見了想指導我,好的,其實我也是一知半解。
基本上就這麼多
應某人要求,加上最後一句 #Include <windows.h>
最後更新:2017-04-02 04:00:24