35

クラスを std::string を使用するように変更しました (ここで得た回答に基づいていますが、私が持っている関数は wchar_t * を返します。それを std::string に変換するにはどうすればよいですか?

私はこれを試しました:

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

しかし、エラー C2440: 'initializing' : cannot convert from 'wchar_t *' to 'std::basic_string<_Elem,_Traits,_Ax>' と表示されます

4

7 に答える 7

51
std::wstring ws( args.OptionArg() );
std::string test( ws.begin(), ws.end() );
于 2011-07-08T11:31:57.370 に答える
10

次の関数を使用して、ワイド 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などのライブラリを使用します。

于 2010-12-02T21:22:33.793 に答える
5

これは古い質問ですが、実際に変換を求めているのではなく、Mircosoft の TCHAR を使用して ASCII と Unicode の両方を構築できるようにする場合は、 std::string が本当に

typedef std::basic_string<char> string

したがって、独自の typedef を定義できます。たとえば、

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

次に、、、などでmagic::string使用できますTCHARLPCTSTR

于 2013-11-15T17:16:00.963 に答える
4

wstringすべてをUnicodeで使用して保持することができます

于 2010-12-02T21:14:31.697 に答える
2

次のコードはより簡潔です。

wchar_t wstr[500];
char string[500];
sprintf(string,"%ls",wstr);
于 2018-11-05T01:26:38.320 に答える