VC++中通过MultiByteToWideChar将string|char*转换为wstring|wchar_t*

函数原型:
int MultiByteToWideChar(
  UINT CodePage, 
  DWORD dwFlags,         
  LPCSTR lpMultiByteStr, 
  int cbMultiByte,       
  LPWSTR lpWideCharStr,  
  int cchWideChar        
);

参数说明:
1、CodePage
指定要转换成的字符集代码页,它可以是任何已经安装的或系统自带的字符集,可选择以下代码页:
CP_ACP         //当前系统ANSI代码页 
CP_MACCP       //当前系统Macintosh代码页 
CP_OEMCP       //当前系统OEM代码页,一种原始设备制造商硬件扫描码 
CP_SYMBOL      //Symbol代码页,用于Windows 2000及以后版本
CP_THREAD_ACP  //当前线程ANSI代码页,用于Windows 2000及以后版本
CP_UTF7  //UTF-7,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL 
CP_UTF8  //UTF-8,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL

2、dwFlags
指定是否转换成预制字符或合成的宽字符,对控制字符是否使用像形文字,以及怎样处理无效字符:
MB_PRECOMPOSED //总是使用预制字符,即有单个预制字符时,就不会使用分解的基字符和不占空间字符。此为函数的

默认选项,不能和MB_COMPOSITE合用 
MB_COMPOSITE   //总是使用分解字符,即总是使用基字符+不占空间字符的方式 
MB_ERR_INVALID_CHARS //设置此选项,函数遇到非法字符就失败并返回错误码ERROR_NO_UNICODE_TRANSLATION,否则

丢弃非法字符 
MB_USEGLYPHCHARS //使用像形字符代替控制字符

3、lpMultiByteStr //要转换的字符串
4、cbMultiByte    //要转换字符串的长度,-1表示转换到字符串结尾
5、lpWideCharStr //接收转换后输出的宽字符串的缓冲区
6、cchWideChar    //输出缓冲区大小,如果为0,lpMultiByteStr将被忽略,函数将返回所需缓冲区大小而不使用

lpWideCharStr

返回值:
为0表示调用失败;当cchWideChar为0时,函数将返回所需缓冲区大小

下面来看看将string|char*转换为wstring|wchar_t*的例子:
//string转换为wstring:
string str=_T("测试代码");
int size=MultiByteToWideChar(CP_ACP,0,str.c_str(),-1,NULL,0);
wchar_t *ch=new wchar_t[size+1];
if(!MultiByteToWideChar(CP_ACP,0,str.c_str(),-1,ch,size))
{
    return false;
}
wstring wstr=ch;


//char*转换为wchar_t*char *str=_T("测试代码");
int size=MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);
wchar_t *ch=new wchar_t[size+1];
if(!MultiByteToWideChar(CP_ACP,0,str,-1,ch,size))
{
    return false;
}
原文地址:https://www.cnblogs.com/callback/p/4248025.html