Как преобразовать wstring в строку?

Вопрос в том, как преобразовать wstring в строку?

У меня есть следующий пример:

#include <string>
#include <iostream>

int main()
{
    std::wstring ws = L"Hello";
    std::string s( ws.begin(), ws.end() );

  //std::cout <<"std::string =     "<<s<<std::endl;
    std::wcout<<"std::wstring =    "<<ws<<std::endl;
    std::cout <<"std::string =     "<<s<<std::endl;
}

вывод с закомментированной строкой:

std::string =     Hello
std::wstring =    Hello
std::string =     Hello

но без - только:

std::wstring =    Hello

Что-то не так в примере? Могу ли я выполнить преобразование, как указано выше?

РЕДАКТИРОВАТЬ

Новый пример (с учетом некоторых ответов):

#include <string>
#include <iostream>
#include <sstream>
#include <locale>

int main()
{
    setlocale(LC_CTYPE, "");

    const std::wstring ws = L"Hello";
    const std::string s( ws.begin(), ws.end() );

    std::cout<<"std::string =     "<<s<<std::endl;
    std::wcout<<"std::wstring =    "<<ws<<std::endl;

    std::stringstream ss;
    ss << ws.c_str();
    std::cout<<"std::stringstream =     "<<ss.str()<<std::endl;
}

Результат:

std::string =     Hello
std::wstring =    Hello
std::stringstream =     0x860283c

поэтому строковый поток нельзя использовать для преобразования wstring в строку.

191
задан jleahy 7 March 2013 в 06:56
поделиться