#pragma once
#include <string>
#include <Windows.h>
using namespace std;
#define SAFE_DELETE_ARRAY(p)\
if (p != NULL)\
{\
delete [] p;\
p = NULL;\
}\
namespace utility
{
string unicode_2_ansi(const wchar_t *p_in)
{
int nLen = WideCharToMultiByte(CP_OEMCP, 0, p_in, -1, NULL, 0, NULL, FALSE);
char *p_out = new char[nLen];
memset(p_out, 0, nLen);
WideCharToMultiByte(CP_OEMCP, 0, p_in, -1, p_out, nLen, NULL, FALSE);
string s_out(p_out);
SAFE_DELETE_ARRAY(p_out);
return s_out;
}
wstring ansi_2_unicode(const char *p_in)
{
int nLen = MultiByteToWideChar(CP_ACP, 0, p_in, -1, NULL, 0);
wchar_t *p_out = new wchar_t[nLen];
memset(p_out, 0, nLen);
MultiByteToWideChar(CP_ACP, 0, p_in, -1, p_out, nLen);
wstring s_out(p_out);
SAFE_DELETE_ARRAY(p_out);
return s_out;
}
string unicode_2_utf8(const wchar_t *p_in)
{
int nLen = WideCharToMultiByte(CP_UTF8, 0, p_in, -1, NULL, 0, NULL, FALSE);
char *p_out = new char[nLen];
memset(p_out, 0, nLen);
WideCharToMultiByte(CP_UTF8, 0, p_in, -1, p_out, nLen, NULL, FALSE);
string s_out(p_out);
SAFE_DELETE_ARRAY(p_out);
return s_out;
}
wstring utf8_2_unicode(const char *p_in)
{
int nLen = MultiByteToWideChar(CP_UTF8, 0, p_in, -1, NULL, 0);
wchar_t *p_out = new wchar_t[nLen];
memset(p_out, 0, nLen);
MultiByteToWideChar(CP_UTF8, 0, p_in, -1, p_out, nLen);
wstring s_out(p_out);
SAFE_DELETE_ARRAY(p_out);
return s_out;
}
string ansi_2_utf8(const char *p_in)
{
wstring str = ansi_2_unicode(p_in);
return unicode_2_utf8(str.c_str());
}
string wstring_2_string(wstring s_in)
{
return unicode_2_ansi(s_in.c_str());
}
wstring string_2_wstring(string s_in)
{
return ansi_2_unicode(s_in.c_str());
}
}