MultiByteToWideChar和WideCharToMultiByte用法詳解

1.使用方法詳解

在本文開始之處,先簡要地說一下何爲短字符和寬字符.
所謂的短字符,就是用8bit來表示的字符,典型的應用是ASCII碼.而寬字符,顧名思義,就是用16bit表示的字符,典型的有UNICODE.關於windows下的ASCII和UNICODE的更多信息,可以參考這兩本經典著作:《windows 程序設計》,《windows 核心編程》.這兩本書關於這兩種字符都有比較詳細的解說.

寬字符轉換爲多個短字符是一個難點,不過我們只要掌握到其中的要領,便可如魚得水.
好吧,那就讓我們開始吧.

這個是我們需要轉化的多字節字符串:
char sText[20] = {"多字節字符串!OK!"};

我們需要知道轉化後的寬字符需要多少個數組空間.雖然在這個里程裏面,我們可以直接定義一個20*2寬字符的數組,並且事實上將運行得非常輕鬆愉快.但假如多字節字符串更多,達到上千個乃至上萬個,我們將會發現其中浪費的內存將會越來越多.所以以多字節字符的個數的兩倍作爲寬字符數組下標的聲明絕對不是一個好主意.
所幸,我們能夠確知所需要的數組空間.
我們只需要將MultiByteToWideChar()的第四個形參設爲-1,即可返回所需的短字符數組空間的個數:
DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, sText, -1, NULL, 0);

接下來,我們只需要分配響應的數組空間:
wchar_t *pwText;
pwText = new wchar_t[dwNum];
if(!pwText)
{
delete []pwText;
}

接着,我們就可以着手進行轉換了.在這裏以轉換成ASCII碼做爲例子:
MultiByteToWideChar (CP_ACP, 0, sText, -1, pwText, dwNum);

最後,使用完畢當然要記得釋放佔用的內存:
delete []psText;


同理,寬字符轉爲多字節字符的代碼如下:
wchar_t wText[20] = {L"寬字符轉換實例!OK!"};
DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,wText,-1,NULL,0,NULL,FALSE);
char *psText;
psText = new char[dwNum];
if(!psText)
{
delete []psText;
}
WideCharToMultiByte (CP_OEMCP,NULL,wText,-1,psText,dwNum,NULL,FALSE);
delete []psText;

如果之前我們已經分配好空間,並且由於字符串較短,可以不理會浪費的空間,僅僅只是想簡單地將短字符和寬字符相互轉換,那有沒有什麼簡便的方法呢?
  WIN32 API裏沒有符合這種要求的函數,但我們可以自己進行封裝.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章