سؤال

أحتاج إلى وضع WCHAR[] على std::cout ...إنه جزء من PWLAN_CONNECTION_NOTIFICATION_DATA التي تم تمريرها من رد اتصال Native Wifi API.

لقد حاولت ببساطة std::cout << var;لكنه يطبع العنوان الرقمي للحرف الأول.المقارنة (var == L"some text") لا يعمل أيضًا.يقوم مصحح الأخطاء بإرجاع القيمة المتوقعة، ولكن المقارنة ترجع 0.كيف يمكنني تحويل هذه المصفوفة إلى سلسلة قياسية (std::string)؟

شكرا لك مقدما

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

المحلول

وعلى افتراض فار هو wchar_t *، var == L"some text" لا مقارنة المؤشر. من أجل مقارنة السلسلة المشار إليه بواسطة فار، استخدم دالة مثل wcscmp.

نصائح أخرى

بعض الحلول:

  • اكتب إلى std::wcout بدلاً من ذلك
  • يتحول:
    • الطريقة القياسية باستخدام std::codecvt
    • طريقة Win32، باستخدام WideCharToMultibyte

للطباعة على cout, ، يجب عليك استخدام std::wcout بدلاً من.

أما بالنسبة للمقارنة، فلا أعرف حقًا ما تقصده.

  • لو var هو wchar_t[], ، فأنت تقارن بين مؤشرين.ومن المرجح أن تكون النتيجة خاطئة، لأنه على الرغم من أن محتويات السلسلة قد تكون هي نفسها، إلا أنها مخصصة فعليًا في مواقع ذاكرة مختلفة.الجواب هو إما استخدام وظيفة مثل strcmp الذي يقارن سلاسل نمط C (مؤشرات char)، أو لاستخدام فئة سلسلة C++.
  • و ال operator== عادة ما يعود أ bool, ، وليس عددا صحيحا.لذلك يمكن أن يعود false, ، لكنه لا يستطيع العودة 0...إلا إذا قمت بإنشاء بعض الحمل الزائد الغريب بنفسك.(وهذا ممكن فقط إذا var هو نوع محدد من قبل المستخدم.

واستخدم ما يلي

#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top