В 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++.