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;
}
}

 

 

posted @ 2012-03-10 17:41  Robert_Jackson  阅读(929)  评论(0)    收藏  举报