自己寫unicode轉換ascii碼,wchar*到char*


對於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
#endif

char* 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;  
}


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM