Unicode環境下寬字符------->窄字符的轉換
定義:TCHAR m_szIp[MAX_IP_LEN]; ? 我們要將TCHANR類型數組(寬字符型)轉換為char*pBuffer類型(窄字符型):?
方法一:
? ??
[cpp] view plaincopy print?
int?nNum=WideCharToMultiByte(CP_ACP,0,m_szIp,-1,0,0,NULL,NULL);??????char*?pBuffer=new?char[nNum+1];??????WideCharToMultiByte(CP_ACP,0,m_szIp,-1,pBuffer,nNum,NULL,NULL);??
int nNum=WideCharToMultiByte(CP_ACP,0,m_szIp,-1,0,0,NULL,NULL);char* pBuffer=new char[nNum+1];WideCharToMultiByte(CP_ACP,0,m_szIp,-1,pBuffer,nNum,NULL,NULL);
方法二:T2A ? ?、W2A
[cpp] view plaincopy print?
USES_CONVERSION;????char?*pBuffer?=?T2A(m_szIp);??
USES_CONVERSION;char *pBuffer = T2A(m_szIp);
相反,同樣情況下,窄字符--------->寬字符轉換:
方法一:MultiByteToWideChar
方法二:A2T、A2W
下面是對方法一的兩個函數的封裝:
[cpp] view plaincopy print?
char?*WideCharToAnsi(wchar_t?*pWideChar)??{??????if?(!pWideChar)?return?NULL;??????char?*pszBuf?=?NULL;??????int?needBytes?=?WideCharToMultiByte(CP_ACP,?0,?pWideChar,?-1,?NULL,?0,?NULL,?NULL);??????if?(needBytes?>?0){??????????pszBuf?=?new?char[needBytes+1];??????????ZeroMemory(pszBuf,?(needBytes+1)*sizeof(char));??????????WideCharToMultiByte(CP_ACP,?0,?pWideChar,?-1,?pszBuf,?needBytes,?NULL,?NULL);??????}????????return?pszBuf;??}??????wchar_t?*AnsiCharToWide(char?*pChar)??{??????if?(!pChar)?return?NULL;??????wchar_t?*pszBuf?=?NULL;??????int?needWChar?=?MultiByteToWideChar(CP_ACP,?0,?pChar,?-1,?NULL,?0);??????if?(needWChar?>?0){??????????pszBuf?=?new?wchar_t[needWChar+1];??????????ZeroMemory(pszBuf,?(needWChar+1)*sizeof(wchar_t));??????????MultiByteToWideChar(CP_ACP,?0,?pChar,?-1,?pszBuf,?needWChar);??????}????????return?pszBuf;??}??
char *WideCharToAnsi(wchar_t *pWideChar)
{if (!pWideChar) return NULL;char *pszBuf = NULL;int needBytes = WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, NULL, 0, NULL, NULL);if (needBytes > 0){pszBuf = new char[needBytes+1];ZeroMemory(pszBuf, (needBytes+1)*sizeof(char));WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, pszBuf, needBytes, NULL, NULL);}return pszBuf;
}wchar_t *AnsiCharToWide(char *pChar)
{if (!pChar) return NULL;wchar_t *pszBuf = NULL;int needWChar = MultiByteToWideChar(CP_ACP, 0, pChar, -1, NULL, 0);if (needWChar > 0){pszBuf = new wchar_t[needWChar+1];ZeroMemory(pszBuf, (needWChar+1)*sizeof(wchar_t));MultiByteToWideChar(CP_ACP, 0, pChar, -1, pszBuf, needWChar);}return pszBuf;
}
總結
以上是生活随笔為你收集整理的Unicode字符集下CString/tchar*与char *转换 (解决中文乱码等)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。