#ifndef ENCODE_HPP_
#define ENCODE_HPP_
#pragma warning(disable: 4786)
#pragma warning(disable: 4996)
// #include <standard library headers>
#include <string>
// #include <other library headers>
#ifdef _WIN32
#include <Windows.h>
#endif
// #include "customer headers"
namespace encode
{
inline
std::string
ToUtf8(const wchar_t* str)
{
#ifdef _WIN32
int len = WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL);
char* buf = new char[len + 1];
memset(buf, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, str, -1, buf, len, NULL, NULL);
std::string ret = buf;
delete[] buf;
return ret;
#else
#error "not support"
#endif
}
inline
std::string
ToUtf8(const char* str)
{
#ifdef _WIN32
int len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
wchar_t* buf = new wchar_t[len + 1];
memset(buf, 0, (len + 1)* sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, str, -1, buf, len);
std::string ret = ToUtf8(buf);
delete[] buf;
return ret;
#else
#error "not support"
#endif
}
inline
std::wstring
Utf8ToWstring(const char* str)
{
#ifdef _WIN32
int len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
wchar_t* buf = new wchar_t[len + 1];
memset(buf, 0, (len + 1) * sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0, str, -1, buf, len);
std::wstring ret = buf;
delete[] buf;
return ret;
#else
#error "not support"
#endif
}
inline
std::string
Utf8ToAscii(const char* str)
{
#ifdef _WIN32
const std::wstring wstr = Utf8ToWstring(str);
const wchar_t* tmp = wstr.c_str();
int len = WideCharToMultiByte(CP_ACP, 0, tmp, -1, NULL, 0, NULL, NULL);
char* buf = new char[len + 1];
memset(buf, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, tmp, -1, buf, len, NULL, NULL);
std::string ret = buf;
delete[] buf;
return ret;
#else
#error "not support"
#endif
}
inline
std::wstring
ToWstring(const char* str)
{
#ifdef _WIN32
int len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
wchar_t* buf = new wchar_t[len+1];
memset(buf, 0, (len + 1) * sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, str, -1, buf, len);
std::wstring ret = buf;
delete[] buf;
return ret;
#else
#error "not support"
#endif
}
inline
std::string
ToAscii(const wchar_t* str)
{
#ifdef _WIN32
int len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
char* buf = new char[len + 1];
memset(buf, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, str, -1, buf, len, NULL, NULL);
std::string ret = buf;
delete[] buf;
return ret;
#else
#error "not support"
#endif
}
} // // end of namespace encode
#endif // ENCODE_HPP_
ENCODE封装
最新推荐文章于 2021-10-18 16:19:17 发布