Преобразование char в LPWSTR: методы и примеры кода

В C++ необходимость преобразования между различными кодировками символов, например, из charв LPWSTR, может возникнуть при работе с функциями Windows API, которым требуются широкие строки символов. В этой статье блога мы рассмотрим несколько методов и приведем примеры кода для преобразования charв LPWSTR.

Метод 1: использование MultiByteToWideChar

#include <Windows.h>
#include <string>
LPWSTR ConvertCharToLPWSTR(const char* str)
{
    int bufferSize = MultiByteToWideChar(CP_UTF8, 0, str, -1, nullptr, 0);
    std::wstring wstr(bufferSize, 0);
    MultiByteToWideChar(CP_UTF8, 0, str, -1, &wstr[0], bufferSize);
    return const_cast<LPWSTR>(wstr.c_str());
}

Метод 2: использование std::wstring_convert (C++11 или выше)

#include <codecvt>
#include <locale>
LPWSTR ConvertCharToLPWSTR(const char* str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
    std::wstring wstr = converter.from_bytes(str);
    return const_cast<LPWSTR>(wstr.c_str());
}

Метод 3. Использование mbstowcs

#include <cstdlib>
#include <cwchar>
LPWSTR ConvertCharToLPWSTR(const char* str)
{
    size_t size = mbstowcs(nullptr, str, 0) + 1;
    wchar_t* wstr = new wchar_t[size];
    mbstowcs(wstr, str, size);
    return wstr;
}

Метод 4. Использование макросов преобразования ATL (для Visual C++)

#include <atlbase.h>
LPWSTR ConvertCharToLPWSTR(const char* str)
{
    USES_CONVERSION;
    return A2W(str);
}

Преобразование charв LPWSTRнеобходимо при работе с функциями Windows API, которым требуются широкие строки символов. В этой статье мы рассмотрели различные методы выполнения этого преобразования, включая использование макросов преобразования MultiByteToWideChar, std::wstring_convert, mbstowcsи ATL. Используя эти подходы, вы можете легко преобразовать строки charв LPWSTRв своих программах на C++.