windows下Unicode與ANSI的相互轉換

來源:互聯網
上載者:User

      對於windows下的wchar, tchar以及其轉換函式, 比較煩人! 不過沒有辦法, 罵完了還是得總結總結, 把學習到的東西寫下來, 以備後用.

     字元編碼的知識可以從維基裡獲得,UTF-16也就是Unicode,到ANSI也就是通常的一位元組英文字元,在轉換的時候的標誌是CP_ACP : CodePageAnsiCodePage

    1  簡單的不包括中文的widechar字串轉化為普通的char.

CString str("2012 0625");int   nYear = 1,   nMonth = 1,   nDate = 1;swscanf(str.GetBuffer(), _T("%d  %d"), &nYear, &nMonth);str.ReleaseBuffer();char charstring[1024];ZeroMemory(charstring,sizeof(charstring));WCHAR *wcharstring=str.GetBuffer();WideCharToMultiByte(CP_ACP,NULL,wcharstring,-1,charstring,1024,NULL,NULL);MultiByteToWideChar(CP_ACP,NULL,charstring,-1,wcharstring,1024);str.ReleaseBuffer();sscanf(charstring, ("%d  %d"), &nYear, &nMonth);

     2. 使用MultiByteToWideChar的時候要注意,因為我們不知道轉出來的長度是多長,需要先傳輸出長度為0進去,這個函數返回的是轉換會輸入的以WideChar為單位的長度;然後根據傳回值動態開闢記憶體來存放這些輸出資料,再次調用此函數,傳進正確的輸出長度,才能確保沒有字元緩衝區問題發生。

    

char ansichar[] = "ansistring";TCHAR *pUtf16 = 0;TCHAR myTest[64] = {0};int k = MultiByteToWideChar(CP_ACP,0,ansichar,-1,pUtf16,0);pUtf16 = new TCHAR[k];MultiByteToWideChar(CP_ACP,0,ansichar,-1,pUtf16,k);

    注意,這裡分配的空間不需要分配k+1個,因為這個函數已經把最後的\0也算進去做字串的個數。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.