VC6与VC2010的默认编码差别
VC6与VC2010默认编码的差别
VC6默认使用的字符ANSII编码方式
VC2010默认使用UNICODE编码方式
因此在VC2010中编辑C++容易出现如下错误:
如:
· LPWSTR 类型的实参与const char *类型形参不兼容
·不能将参数 1 从"WCHAR [32]”转换为 "char *”
下面提供了ansii与unicode编码方式转变的代码
类型转换
#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;
}
}

浙公网安备 33010602011771号