Вопрос

Мне нужно поместить 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top