所謂的短字元,就是用8bit來表示的字元,典型的應用是ASCII碼.而寬字元,顧名思義,就是用16bit表示的字元,典型的有UNICODE.這個是我們需要轉化的多位元組字串:
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, psText, -1, sText, dwSize);
最後,使用完畢當然要記得釋放佔用的記憶體:
delete []psText;
同理,寬字元轉為多位元組字元的代碼如下:
wchar_t wText[20] = {L"寬字元轉換執行個體!OK!"};
DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
char *psText;
psText = new char[dwNum];
if(!psText)
{
delete []psText;
}
WideCharToMultiByte (CP_OEMCP,NULL,lpcwszStr,-1,psText,dwNum,NULL,FALSE);
delete []psText;
應用舉例:
DWORD num=WideCharToMultiByte(CP_OEMCP,NULL,m_strFileName.GetBuffer(0),-1,NULL,0,NULL,FALSE);
char *p1;
p1=new char[50];
WideCharToMultiByte(CP_OEMCP,NULL,m_strFileName.GetBuffer(0),-1,p1,num,NULL,FALSE);