} } }

    wchar_t与char转换、wstring与string转换

    添加时间:2013-5-17 点击量:
    1、wstring string转换
    1)win32下wchar_t占2个字节,linux下wchar_t占4个字节。wchar_t的高字节应当存放在char数组的低字节。
    2)win下面有函数WideCharToMultiByte() 和 MultiByteToWideChar()
    3)linux类似的函数有:mbstowcs() wcstombs()

    wcstombs和mbstowcs应用:


    #include <locale.h>
    
    setlocale(LC_ALL, );
    wcstombs(char to,wchar_t ,size_t _maxCount);
    mbstowcs(wchar_t to,char ,size_t _maxCount); //_maxCount,大小必然如果长度的2倍,不然出来的中文也会是乱码


    demo:


    #include <string>
    #include <stdlib.h>
    #include <locale.h>
    std::string ws2s(const std::wstring& ws)
    {
    std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = C;
    setlocale(LC_ALL, chs);
    const wchar_t _Source = ws.c_str();
    size_t _Dsize = 2 ws.size() + 1;
    char _Dest = new char[_Dsize];
    memset(_Dest,0,_Dsize);
    wcstombs(_Dest,_Source,_Dsize);
    std::string result = _Dest;
    []_Dest;
    setlocale(LC_ALL, curLocale.c_str());
    return result;
    }

    std::wstring s2ws(const std::string& s)
    {
    setlocale(LC_ALL, chs);
    const char _Source = s.c_str();
    size_t _Dsize = s.size() + 1;
    wchar_t _Dest = new wchar_t[_Dsize];
    wmemset(_Dest, 0, _Dsize);
    mbstowcs(_Dest,_Source,_Dsize);
    std::wstring result = _Dest;
    []_Dest;
    setlocale(LC_ALL, C);
    return result;
    }


     


    2、Notice:


    应用iostream中的io流输入输出wstring或者wchar时,设置locale后,应用wcin及wcout输入输出。


    参考:
    http://www.cnblogs.com/MichaelOwen/articles/2128771.html
    http://www.ibm.com/developerworks/cn/linux/l-cn-ccppglb/index.html?ca=drs-

    文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
    分享到: