string转换为wstring:char*转换为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*的例子
    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;
    }

你可能感兴趣的:(VC/MFC)