#include
#include
{
int ret,ret2;
wchar_t* pws=NULL;
char* putf=NULL;
ret=MultiByteToWideChar(CP_ACP, 0, psrc, -1, NULL, 0);
if(ret<=0){
*ppdst=NULL;
return 0;
}
pws=(wchar_t*)malloc(ret*2);
if(!pws){
*ppdst=NULL;
return 0;
}
MultiByteToWideChar(CP_ACP, 0, psrc, -1, pws, ret);
ret2=WideCharToMultiByte(CP_UTF8, 0, pws, -1, NULL, 0, NULL, NULL);
if(ret2<=0){
free(pws);
return 0;
}
putf=(char*)malloc(ret2);
if(!putf){
free(pws);
return 0;
}
if(WideCharToMultiByte(CP_UTF8, 0, pws, ret, putf, ret2, NULL, NULL)){
*ppdst=putf;
free(pws);
return 1;
}else{
free(pws);
free(putf);
*ppdst=NULL;
return 0;
}
}
int to_gb(char* psrc, char** ppdst)
{
int ret, ret2;
wchar_t* pws=NULL;
char* pgb=NULL;
ret=MultiByteToWideChar(CP_UTF8, 0, psrc, -1, NULL, 0);
if(ret<=0){
*ppdst=NULL;
return 0;
}
pws=(wchar_t*)malloc(ret*2);
if(!pws){
*ppdst=NULL;
return 0;
}
MultiByteToWideChar(CP_UTF8, 0, psrc, -1, pws, ret);
ret2=WideCharToMultiByte(CP_ACP, 0, pws, -1, NULL, 0, NULL, NULL);
if(ret2<=0){
free(pws);
return 0;
}
pgb=(char*)malloc(ret2);
if(!pgb){
free(pws);
*ppdst=NULL;
return 0;
}
if(WideCharToMultiByte(CP_ACP, 0, pws, -1, pgb, ret2, NULL, NULL)){
*ppdst=pgb;
free(pws);
return 1;
}else{*ppdst=0;
free(pgb);
free(pws);
return 0;
}
}