C ++, WCHAR[] в std::cout и сравнение
Вопрос
Мне нужно поместить WCHAR[] в std::cout ...Это часть PWLAN_CONNECTION_NOTIFICATION_DATA, передаваемая из обратного вызова собственного Wifi API.
Я попробовал просто std::cout << var;но он выводит числовой адрес первого символа.сравнение (var == L"some text"
) тоже не работает.Отладчик возвращает ожидаемое значение, однако сравнение возвращает 0.Как я могу преобразовать этот массив в стандартную строку (std::string)?
Заранее благодарю
Решение
Предполагая, что var является wchar_t *
, var == L"some text"
выполняет сравнение указателей. Чтобы сравнить строку, указанную в var, используйте функцию, например wcscmp
.
Другие советы
Некоторые решения:
- Вместо этого напишите в std::wcout
- Преобразовать:
- Стандартным способом, используя std::codecvt
- Способ Win32, использующий WideCharToMultiByte
Для печати в cout
, вы должны использовать std::wcout
вместо этого.
Что касается сравнения, я не совсем уверен, что вы имеете в виду.
- если
var
являетсяwchar_t[]
, тогда вы сравниваете два указателя.И результат, скорее всего, будет false, потому что, хотя содержимое строки может быть одинаковым, физически они распределены в разных ячейках памяти.Ответ заключается в том, чтобы либо использовать функцию типаstrcmp
который сравнивает строки в стиле C (указатели char) или использует класс C ++ string. - и тот
operator==
обычно возвращаетbool
, а не целое число.Так что он может вернутьсяfalse
, но это не может вернуться0
...Если только вы сами не создали какую-нибудь странную перегрузку.(а это возможно только в том случае, еслиvar
является определяемым пользователем типом.
используйте следующее
#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif