C++، WCHAR[] إلى std::cout والمقارنة
سؤال
أحتاج إلى وضع 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
لا تنتمي إلى StackOverflow