閱讀333 返回首頁    go 汽車大全


(轉載)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

  上一篇:go OGRE中的四元數與旋轉
  下一篇:go DbHelper數據操作類,DbProviderFactories