📜  const char * 到 std::wstring - C++ (1)

📅  最后修改于: 2023-12-03 15:00:01.703000             🧑  作者: Mango

将 const char * 转换为 std::wstring - C++

在 C++ 代码中,我们经常需要在 std::string 和 std::wstring 之间进行转换。虽然它们之间的转换是相对容易的,但是当涉及到 const char *(C 风格字符串)的时候,可能会变得略微棘手。本文将介绍如何将 const char * 转换为 std::wstring。

使用 std::wstring_convert

C++11 引入了一个新的转换库:std::wstring_convert。它是 std::codecvt 和 std::wbuffer_convert 的封装器,提供了一个简单的接口来进行字符串转换。下面展示了如何使用 std::wstring_convert 将 const char * 转换为 std::wstring:

#include <locale>
#include <codecvt>
#include <string>

std::wstring stringToWString(const std::string &str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
    return converter.from_bytes(str);
}

int main()
{
    const char *cstr = "Hello, world!";
    std::wstring wstr = stringToWString(cstr);
}

上面的代码使用 std::codecvt_utf8<wchar_t>,它指定了输入字符串为 UTF-8 编码。如果您的输入字符串使用其他编码,请选择适当的 std::codecvt<> 模板类。

注意:在 Windows 上,您可能需要使用 std::codecvt_utf8_utf16<wchar_t> 来转换字符串,因为 Windows 使用 UTF-16 编码。

使用 MultiByteToWideChar

另一种将 const char * 转换为 std::wstring 的方法是使用 MultiByteToWideChar 函数。这是一个 Windows API 函数,在 Windows 操作系统上非常常见。

#include <Windows.h>
#include <string>

std::wstring stringToWString(const std::string &str)
{
    int length = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0);
    wchar_t *buffer = new wchar_t[length];
    MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, buffer, length);
    std::wstring wstr(buffer);
    delete[] buffer;
    return wstr;
}

int main()
{
    const char *cstr = "Hello, world!";
    std::wstring wstr = stringToWString(cstr);
}

上面的代码使用 CP_UTF8 标志将输入字符串指定为 UTF-8 编码。如果您的输入字符串使用其他编码,请选择适当的标志。

注意:在 Windows API 中使用 std::wstring 时,请记得在末尾添加一个空字符。

结论

无论您选择哪种方法,将 const char * 转换为 std::wstring 是一项简单的任务,但确保您选择的方法适用于您的操作系统和输入字符串的编码。