سؤال

لدي موقف حيث أحتاج إلى مقارنة أ char* مع WideString.
كيف يمكنني تحويل WideString إلى char* في C++؟

هل كانت مفيدة؟

المحلول

نصائح أخرى

WideCharToMultiByte () و < وأ href = "http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx" يختلط = "noreferrer نوفولو"> MultiByteToWideChar () .

غير ممكن.في الواقع، لقد خلطت بين مفهومين مختلفين:

  • تتضمن السلسلة العريضة مخزنًا مؤقتًا بتشفير UTF-16.
  • قد يحتوي char* على أي شيء، بدءًا من UTF-8 إلى نص ASCII فقط (وفي هذه الحالة، يكون هذا قابلاً للتحويل فقط إذا كانت السلسلة العريضة الخاصة بك لا تحتوي على أحرف غير ASCII).

يرجى الاطلاع على إجابتي على https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful حول كيفية التعامل مع النص بشكل صحيح.

ل يقارن أ System::WideString كائن مع أ char* (مثل السؤال جسم يقول أنك تريد أن تفعل)، يمكنك إنشاء ملف جديد WideString كائن من المؤشر ثم استخدم العادي == المشغل أو العامل.يحتوي الفصل على العديد من المنشئات، بما في ذلك واحد لـ const char*.

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

في الواقع، طالما أن WideString الكائن على اليسار، فلن تحتاج حتى إلى استدعاء المنشئ لأنه سيتم تحويل المؤشر تلقائيًا.

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

ل يتحول أ WideString إلى أ char* (مثل السؤال عنوان يقول أنك تريد القيام به)، قد تفكر في استخدام AnsiString يكتب.انهم قابلة للتحويل بين بعضها البعض.للحصول على المؤشر العادي، اتصل بـ c_str الطريقة، تماما كما تفعل مع std::string.

WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top