wstring转换为string:wchar_t*转换为char*:

  • 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://flyxxtt.blogbus.com/logs/43623461.html

    函数原型:
    int WideCharToMultiByte(
      UINT CodePage,
      DWORD dwFlags,
      LPCWSTR lpWideCharStr,
      int cchWideChar,
      LPSTR lpMultiByteStr,
      int cbMultiByte,
      LPCSTR lpDefaultChar,   
      LPBOOL lpUsedDefaultChar
    );

    参数说明:
    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
    指定如何处理没有转换的字符,一般情况下设为0
    WC_NO_BEST_FIT_CHARS  //把不能直接转换成相应多字节字符的Unicode字符转换成lpDefaultChar指定的默认字符。
    WC_COMPOSITECHECK     //把合成字符转换成预制的字符。它可以与后三个选项中的任何一个组合使用,如果没有与他们中的任何一个组合,则与选项WC_SEPCHARS相同。
    WC_ERR_INVALID_CHARS  //此选项会致使函数遇到无效字符时失败返回,并且GetLastError会返回错误码ERROR_NO_UNICODE_TRANSLATION。否则函数会自动丢弃非法字符。此选项只能用于UTF8
    WC_DISCARDNS      //转换时丢弃不占空间的字符,与WC_COMPOSITECHECK一起使用
    WC_SEPCHARS       //转换时产生单独的字符,此是默认转换选项,与WC_COMPOSITECHECK一起使用
    WC_DEFAULTCHAR    //转换时使用默认字符代替例外的字符,(最常见的如"?"),与WC_COMPOSITECHECK一起使用

    3、lpWideCharStr  //要转换的宽字符串
    4、cchWideChar    //要转换宽字符串的长度,-1表示转换到字符串结尾
    5、lpMultiByteStr //接收转换后输出的字符串的缓冲区
    6、cbMultiByte    //输出缓冲区大小,如果为0,lpMultiByteStr将被忽略,函数将返回所需缓冲区大小而不使用lpMultiByteStr。
    7、lpDefaultChar  //指向字符的指针,在指定编码里找不到相应字符时使用此字符作为默认字符代替,如果为NULL则使用系统默认字符
    8、lpUsedDefaultChar  //开关变量的指针,用以表明是否使用过默认字符,可设为NULL

    返回值:为0表示调用失败

    下面就来看看如何将wstring和wchar_t*转换为string和char*
    wstring转换为string:

    wstring wstr=_T("翔翔糖糖");
    int size=WideCharToMultiByte(CP_ACP,0,wstr.c_str(),-1,NULL,0,NULL,NULL);
    char *ch=new char[size+1];
    if(!WideCharToMultiByte(CP_ACP,0,wstr.c_str(),-1,ch,size,NULL,NULL))
    {
        return false;
    }
    string str=ch;

    wchar_t*转换为char*:
    wchar_t *wch=_T("翔翔糖糖");
    int size=WideCharToMultiByte(CP_ACP,0,wch,-1,NULL,0,NULL,NULL);
    char *ch=new char[size+1];
    if(!WideCharToMultiByte(CP_ACP,0,wch,-1,ch,size,NULL,NULL))
    {
        return false;
    }

     

    学习如何将string|char*转换为wstring|wchar_t*请看:

    http://flyxxtt.blogbus.com/logs/43667936.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值