自己寫unicode轉換ascii碼,wchar*到char*,unicodewchar
對於ascii碼的char其實就是unicode碼wchar的首個位元組碼,
如wchar[20] = "qqqq"; 在記憶體中排碼其實是char的'q' '\0'這類,因此我們如果自己寫unicode碼轉換為ascii的char,只需要取其首位元組即可,如下本人寫了一個wchar到char的轉換的函數。由於代碼簡單,加上了記憶體泄露測試方式。
#include <stdio.h>#ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)#else#define DEBUG_CLIENTBLOCK#endif#define _CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>#include <tchar.h>#include <Windows.h>#ifdef _DEBUG#define new DEBUG_CLIENTBLOCK#endifchar* UnicodeToMultibyte(WCHAR *wStr){if (NULL != wStr){int nLen = wcslen(wStr);char *pStr = new char[nLen + 1];int i = 0;for (; i < nLen; ++i){(pStr)[i] = (char)*(wStr + i);}(pStr)[i] = '\0';printf("%s\n", pStr);return pStr;}return NULL;}int main(){_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);/*char *str = new char[100];*/WCHAR wStr[250] = L"qqqqqqqqqqqqq";char szTemp[250] = _T("wwwwwwwwwwwww");char* pTemp = UnicodeToMultibyte(wStr);strcpy(szTemp, pTemp);delete pTemp;//注意,小心記憶體泄露printf("%s\n", szTemp);return 0;}
當然也可以通過windows的轉換函式,這個msdn上有詳解就不解釋啦
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn) { LPSTR pszOut = NULL; if (lpwszStrIn != NULL) { int nInputStrLen = wcslen (lpwszStrIn); // Double NULL Termination int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2; pszOut = new char [nOutputStrLen]; if (pszOut) { memset (pszOut, 0x00, nOutputStrLen); WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0); } } return pszOut; }