函数原型:
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*的例子:
1、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;
2、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;
}