wchar* 轉換為char *

來源:互聯網
上載者:User
所謂的短字元,就是用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);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.