char 2 wchar & wchar 2 char
//動態釋放內存
void Release()
{
if (m_char)
{
delete m_char;
m_char = NULL;
}
if (m_wchar)
{
delete m_wchar;
m_wchar = NULL;
}
}
//wchar_t TO char
char* WcharToChar(const wchar_t* wp)
{
Release();
int len = WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), NULL, 0, NULL, NULL);
m_char = new char[len + 1];
WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), m_char, len, NULL, NULL);
m_char[len] = '\0';
return m_char;
}
//char TO wchar_t
wchar_t* CharToWchar(const char* c)
{
Release();
int len = MultiByteToWideChar(CP_ACP, 0, c, strlen(c), NULL, 0);
m_wchar = new wchar_t[len + 1];
MultiByteToWideChar(CP_ACP, 0, c, strlen(c), m_wchar, len);
m_wchar[len] = '\0';
return m_wchar;
}
Utf8 2 Unicode ANSI
WCHAR * Utf8ToUnicode(char* unicode)
{
int len = MultiByteToWideChar(CP_UTF8, 0, unicode, -1, NULL, 0);
WCHAR *szUtf8 = new wchar_t[len + 1];
memset(szUtf8, 0, len + 1);
MultiByteToWideChar(CP_UTF8, 0, unicode, -1, szUtf8, len);
szUtf8[len] = '\0';
len = len - 1;
return szUtf8;
}
char * UnicodeToANSI(const wchar_t* str)
{
char* result;
int textlen;
textlen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
result = (char *)malloc((textlen + 1)*sizeof(char));
memset(result, 0, sizeof(char) * (textlen + 1));
WideCharToMultiByte(CP_ACP, 0, str, -1, result, textlen, NULL, NULL);
return result;
}
char* UTF8ToANSI(const char* str)
{
wchar_t* temp = UTF8ToUnicode(str);
char* res = UnicodeToANSI(temp);
delete[]temp;
return res;
}
CStringHexToInt
int CStringHexToInt(CString str)
{
int nRet = 0;
int count = 1;
for (int i = str.GetLength() - 1; i >= 0; --i)
{
int nNum = 0;
char chTest;
chTest = str.GetAt(i);
if (chTest >= '0' && chTest <= '9')
{
nNum = chTest - '0';
}
else if (chTest >= '?' && chTest <= 'F')
{
nNum = chTest - 'A' + 10;
}
else if (chTest >= 'a' && chTest <= 'f')
{
nNum = chTest - 'a' + 10;
}
nRet += nNum*count;
count *= 16;
}
return nRet;
}