とを比較する必要がある状況がありchar*
ますWideString
。
WideStringをC++でchar*に変換するにはどうすればよいですか?
4 に答える
wcstombs関数を使用できます。
size_t wcstombs(char * mbstr、const wchar_t * wcstr、size_t max) ;
WideCharToMultiByte()およびMultiByteToWideChar( )を参照してください。
オブジェクトをaと比較するには(質問の本文でやりたいと言われているように)、ポインターから新しいオブジェクトを作成してから、通常の演算子を使用できます。このクラスには、.System::WideString
char*
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();
ありえない。実際には、2 つの異なる概念を混在させました。
- Widestring は、UTF-16 エンコーディングのバッファーを意味します。
- char* には、UTF-8 から ASCII のみのテキストまで、何でも含めることができます (この場合、これは、ワイドストリングに非 ASCII 文字が含まれていない場合にのみ変換可能です)。
テキストを適切に処理する方法については、 https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmfulに対する私の回答をご覧ください。