19,472
社区成员




#include "StdAfx.h"
#include "aw.h"
#include "windows.h"
namespace
{
wchar_t* Ansi2Unicode(const char* szAnsi)
{
CHECK_RET(!szAnsi, NULL)
// 预转换,得到所需空间的大小
int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0);
// 分配空间要给'/0'留个空间,MultiByteToWideChar不会给'/0'空间
wchar_t* wszString = new wchar_t[wcsLen+1];
CHECK_RET(!wszString, NULL)
::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen);
// 最后加上结束符'/0'
wszString[wcsLen] = L'/0';
return wszString;
}
char* Unicode2Ansi(const wchar_t* wszString)
{
CHECK_RET(!wszString, NULL)
int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
char* szAnsi = new char[ansiLen + 1];
CHECK_RET(!szAnsi, NULL)
// Unicode版对应的strlen是wcslen
::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL);
// 最后加上'/0'
szAnsi[ansiLen] = '/0';
return szAnsi;
}
}
#define CHECK_RET(check, ret) {if (check) return (ret);}
#include "StdAfx.h"
#include "aw.h"
#include "windows.h"
namespace
{
wchar_t* Ansi2Unicode(const char* szAnsi)
{
if ( wszString == NULL )
return NULL;
// 预转换,得到所需空间的大小
int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0);
// 分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = new wchar_t[wcsLen+1];
CHECK_RET(!wszString, NULL)
::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen);
// 最后加上结束符'\0'
wszString[wcsLen] = L'\0';
return wszString;
}
char* Unicode2Ansi(const wchar_t* wszString)
{
if ( wszString == NULL )
return NULL;
int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
char* szAnsi = new char[ansiLen + 1];
CHECK_RET(!szAnsi, NULL)
// Unicode版对应的strlen是wcslen
::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL);
// 最后加上'\0'
szAnsi[ansiLen] = '\0';
return szAnsi;
}
}
这代码写的相当的搓,首先哪会最后填零啊,必须事先ZeroMemory填冲嘛,第二WideMulti函数,第四个参数直接填入-1,系统会自己计算长度的,第三嘛,就一个代码页转,这个转码的CP_ACP在参数里面会好很多,编码不一定就这两种,gbk编码转wchar怎么办