Подтвердить что ты не робот

Как преобразовать wchar_t * в std::string?

Я изменил свой класс на использование std::string (на основе ответа, который я получил здесь, но функция, которую я возвращаю wchar_t *. Как преобразовать ее в std::string?

Я пробовал это:

std::string test = args.OptionArg();

но он говорит об ошибке C2440: 'initializing': не может преобразовать из 'wchar_t *' в 'std:: basic_string < _Elem, _Traits, _Ax > '

4b9b3361

Ответ 1

Вы можете просто использовать wstring и сохранить все в Юникоде

Ответ 2

wstring ws( args.OptionArg() );
string test( ws.begin(), ws.end() );

Ответ 3

Это старый вопрос, но если это так, вы действительно не ищете конверсии, а используете материал TCHAR из Mircosoft, чтобы иметь возможность создавать как ASCII, так и Unicode, вы могли бы вспомнить, что std::string действительно

typedef std::basic_string<char> string

Итак, мы можем определить наш собственный typedef, скажем

#include <string>
namespace magic {
typedef std::basic_string<TCHAR> string;
}

Затем вы можете использовать magic::string с TCHAR, LPCTSTR и т.д.

Ответ 4

Вы можете преобразовать большую строку char в строку ASCII, используя следующую функцию:

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

std::string ToNarrow( const wchar_t *s, char dfault = '?', 
                      const std::locale& loc = std::locale() )
{
  std::ostringstream stm;

  while( *s != L'\0' ) {
    stm << std::use_facet< std::ctype<wchar_t> >( loc ).narrow( *s++, dfault );
  }
  return stm.str();
}

Помните, что это просто заменит любой широкий символ, для которого эквивалентный символ ASCII не существует с параметром dfault; он не конвертируется из UTF-16 в UTF-8. Если вы хотите конвертировать в UTF-8, используйте библиотеку, такую ​​как ICU.

Ответ 5

просто для удовольствия: -):

const wchar_t* val = L"hello mfc";
std::string test((LPCTSTR)CString(val));