MiniEngine/MiniEngine_Windows.cpp

108 lines
2.1 KiB
C++
Raw Permalink Normal View History

2017-02-25 22:40:35 +08:00
#include "MiniEngine.h"
using namespace std;
#include <windows.h>
2017-02-25 22:40:35 +08:00
2017-05-24 02:57:23 +08:00
int _utf8_to_gb(const char* src, char* dst, int len)
2017-02-25 22:40:35 +08:00
{
2017-05-23 22:31:57 +08:00
int ret = 0;
WCHAR* strA;
int i= MultiByteToWideChar(CP_UTF8, 0, src, -1, NULL, 0);
if (i <= 0) {
2017-05-24 02:57:23 +08:00
return -1;
2017-02-25 22:40:35 +08:00
}
2017-05-23 22:31:57 +08:00
strA = (WCHAR*)malloc(i * 2);
MultiByteToWideChar(CP_UTF8, 0, src, -1, strA, i);
i = WideCharToMultiByte(CP_ACP, 0, strA, -1, NULL, 0, NULL, NULL);
if (len >= i) {
ret = WideCharToMultiByte(CP_ACP, 0, strA, -1, dst, i, NULL, NULL);
dst[i] = 0;
}
if (ret <= 0) {
free(strA);
2017-05-24 02:57:23 +08:00
return -2;
2017-02-25 22:40:35 +08:00
}
2017-05-23 22:31:57 +08:00
free( strA );
2017-05-24 02:57:23 +08:00
return 0;
2017-02-25 22:40:35 +08:00
}
2017-05-24 02:57:23 +08:00
int _gb_to_utf8(const char* src, char* dst, int len)
2017-02-25 22:40:35 +08:00
{
2017-05-23 22:31:57 +08:00
int ret = 0;
WCHAR* strA;
int i= MultiByteToWideChar(CP_ACP, 0, src, -1, NULL, 0);
if (i <= 0) {
2017-05-24 02:57:23 +08:00
return -1;
2017-02-25 22:40:35 +08:00
}
2017-05-23 22:31:57 +08:00
strA = (WCHAR*)malloc(i * 2);
MultiByteToWideChar(CP_ACP, 0, src, -1, strA, i);
i = WideCharToMultiByte(CP_UTF8, 0, strA, -1, NULL, 0, NULL, NULL);
if (len >= i) {
ret = WideCharToMultiByte(CP_UTF8, 0, strA, -1, dst, i, NULL, NULL);
dst[i] = 0;
2017-02-25 22:40:35 +08:00
}
2017-05-23 22:31:57 +08:00
if (ret <= 0) {
free(strA);
2017-05-24 02:57:23 +08:00
return -2;
2017-05-23 22:31:57 +08:00
}
free(strA);
2017-05-24 02:57:23 +08:00
return 0;
2017-02-25 22:40:35 +08:00
}
2017-05-24 02:57:23 +08:00
2017-02-25 22:40:35 +08:00
string UTF8ToGBK(string UTF8String)
{
int sz=UTF8String.size()*2/3+256;
2017-05-23 22:31:57 +08:00
auto gbkstr=new char[sz];
2017-02-25 22:40:35 +08:00
memset(gbkstr,0,sz);
2017-05-24 02:57:23 +08:00
if(_utf8_to_gb(UTF8String.c_str(),gbkstr,sz)!=0)
{
return "[MiniEngine] UT8ToGBK Convert Failed";
}
2017-02-25 22:40:35 +08:00
string s((char*)gbkstr);
delete[] gbkstr;
return s;
}
string GBKToUTF8(string GBKString)
{
int sz=GBKString.size()*3/2+32;
2017-05-23 22:31:57 +08:00
auto utf8str=new char[sz];
2017-02-25 22:40:35 +08:00
memset(utf8str,0,sz);
2017-05-24 02:57:23 +08:00
if(_gb_to_utf8(GBKString.c_str(),utf8str,sz)!=0)
{
return "[MiniEngine] GBKToUTF8 Convert Failed";
}
2017-02-25 22:40:35 +08:00
2017-05-23 22:31:57 +08:00
string s(utf8str);
2017-02-25 22:40:35 +08:00
delete[] utf8str;
return s;
}
#ifdef _MSC_VER
bool isexist(std::string Path)
{
return false;
}
bool canread(std::string Path)
{
return false;
}
bool canwrite(std::string Path)
{
return false;
}
bool canexecute(std::string Path)
{
return false;
}
#endif /// End of _MSC_VER