过往的项目中总是设计到一些UNICODE与ANSI之间的编码转换,这个在Java中不难,使用API就搞定了。但是在C/C++中就要麻烦一点,可以使用下面的代码实现转换。
声明:该代码分配的空间需要手动删除掉!并且只能在Windows的平台下使用。
UNICODE转换ANSI:
char* CODE_W2A(LPCWSTR lpW)
{
int len = ::WideCharToMultiByte(CP_ACP, 0, lpW, -1, NULL, 0, NULL, NULL);
if (len == 0)
{
AfxMessageBox(_T("编码转换失败!"));
ASSERT(FALSE);
}
std::vector<char> _ansi(len);
::WideCharToMultiByte(CP_ACP, 0, lpW, -1, &_ansi[0], len, NULL, NULL);
char* lpRet = new char[len];
ZeroMemory(lpRet,len);
lstrcpyA(lpRet,&_ansi[0]);
return lpRet;
}ANSI 转换 UNICODE:
wchar_t* CODE_A2W(LPCSTR lpA)
{
int len = ::MultiByteToWideChar(CP_ACP, 0, lpA, -1, NULL, 0);
if (len == 0)
{
AfxMessageBox(_T("编码转换失败!"));
ASSERT(FALSE);
}
std::vector<wchar_t> _uincode(len);
::MultiByteToWideChar(CP_ACP, 0, lpA, -1, &_uincode[0], len);
wchar_t* lpRet = new wchar_t[len];
ZeroMemory(lpRet,len);
lstrcpyW(lpRet,&_uincode[0]);
return lpRet;
}
本文介绍了一种在C/C++环境下进行Unicode与Ansi编码相互转换的方法,适用于Windows平台。通过提供的代码示例,展示了如何实现这两种编码间的转换。
1万+

被折叠的 条评论
为什么被折叠?



