2

とを比較する必要がある状況がありchar*ますWideString
WideStringをC++でchar*に変換するにはどうすればよいですか?

4

4 に答える 4

6

wcstombs関数を使用できます。

size_t wcstombs(char * mbstr、const wchar_t * wcstr、size_t max) ;

于 2009-12-17T23:59:32.543 に答える
3

WideCharToMultiByte()およびMultiByteToWideChar( )を参照してください。

于 2009-12-17T23:59:55.927 に答える
2

オブジェクトをaと比較するには(質問の本文でやりたいと言われているように)、ポインターから新しいオブジェクトを作成してから、通常の演算子を使用できます。このクラスには、.System::WideStringchar*WideString==const char*

char* foo = ...;
WideString bar = ...;
if (WideString(foo) == bar)
  std::cout << "They're equal!\n";

WideString実際、オブジェクトが左側にある限り、ポインターは自動的に変換されるため、コンストラクターの呼び出しも必要ありません。

if (bar == foo) { ... }

a を a に変換するにWideString(char*質問のタイトルにあるように)、AnsiString型の使用を検討してください。それらは相互に変換可能です。通常のポインターを取得するには、 のc_str場合と同様にメソッドを呼び出しますstd::string

WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();
于 2009-12-18T02:46:37.853 に答える
1

ありえない。実際には、2 つの異なる概念を混在させました。

  • Widestring は、UTF-16 エンコーディングのバッファーを意味します。
  • char* には、UTF-8 から ASCII のみのテキストまで、何でも含めることができます (この場合、これは、ワイドストリングに非 ASCII 文字が含まれていない場合にのみ変換可能です)。

テキストを適切に処理する方法については、 https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmfulに対する私の回答をご覧ください。

于 2009-12-18T01:32:40.250 に答える