Как присвоить wchar[256] переменную?

117
18 февраля 2021, 23:50

Есть текстовый файл в котором хранится ссылка к примеру (https://ru.stackoverflow.com) какая там ссылка неизвестна. Я считываю ссылку из файла и записываю её в переменную line.

string line;
ifstream writeT("test.txt");
writeT.is_open();
getline(writeT, line);

Далее мне нужно как то присвоить значение переменной line в WCHAR, я знаю как присвоить текст L"sometext". Как можно присвоить WCHAR webAddress[256] значение переменной line не зная ссылку?

WCHAR webAddress[256] = ;
HRESULT hr = URLDownloadToFile(NULL, webAddress, szFileName, 0, NULL);
Answer 1

Если там действительно ссылка, то там набор символов ASCII, и можно просто написать

std::wstring wline(line.begin(), line.end());
Answer 2

Предложенный до меня ответ подходит только для ASCII строк. Я рассмотрю общий случай, когда входная строка содержит не только ASCII-символы, но и, к примеру, кириллицу.

Предположим, у вас входной файл в кодировке UTF-8. Вам нужно конвертировать строку в кодировку UTF-16, понятную функциям WinAPI. Это можно сделать с помощью WinAPI функции MultiByteToWideChar:

std::string line;
// ... пропущено
WCHAR webAddress[256];
if (MultiByteToWideChar(CP_UTF8, 0, line.c_str(), line.size() + 1, webAddress, 256)) {
    HRESULT hr = URLDownloadToFileW(NULL, webAddress, szFileName, 0, NULL);
}
READ ALSO
Программа работает медленне, чем должна

Программа работает медленне, чем должна

Есть код простой небольшой демки на C++В ней реализовывается механика "ходить, ставить блоки, убирать блоки"

116
Странное поведение QString (проблема с кодировкой)

Странное поведение QString (проблема с кодировкой)

Проблема заключается в том, что в разных местах программы функции, работающие со QString, ведут себя по-разному в отношении обработки кириллицыЭто...

122