converting narrow string to wide string

前端 未结 9 1501
难免孤独
难免孤独 2020-12-06 11:57

How can i convert a narrow string to a wide string ?

I have tried this method :

string myName;
getline( cin , myName );
wst         


        
9条回答
  •  鱼传尺愫
    2020-12-06 12:36

    You should do this :

    inline std::wstring convert( const std::string& as )
    {
                // deal with trivial case of empty string
        if( as.empty() )    return std::wstring();
    
                // determine required length of new string
        size_t reqLength = ::MultiByteToWideChar( CP_UTF8, 0, as.c_str(), (int)as.length(), 0, 0 );
    
                // construct new string of required length
        std::wstring ret( reqLength, L'\0' );
    
                // convert old string to new string
        ::MultiByteToWideChar( CP_UTF8, 0, as.c_str(), (int)as.length(), &ret[0], (int)ret.length() );
    
                // return new string ( compiler should optimize this away )
        return ret;
    }
    

    This expects the std::string to be UTF-8 (CP_UTF8), when you have another encoding replace the codepage.

    Another way could be :

    inline std::wstring convert( const std::string& as )
    {
        wchar_t* buf = new wchar_t[as.size() * 2 + 2];
        swprintf( buf, L"%S", as.c_str() );
        std::wstring rval = buf;
        delete[] buf;
        return rval;
    }
    

提交回复
热议问题