📜  字符串到 wstring - C++ (1)

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

字符串到 wstring - C++

在 C++ 中,我们可以使用 std::wstring 类型来表示宽字符串。它的定义如下:

typedef basic_string<wchar_t> wstring;

std::string 类型一样,std::wstring 也有一些成员函数可以方便地执行字符串操作。如果你需要将普通的字符串(即 const char*)转换成 std::wstring,可以使用下面的方法。

使用 wstring_convert 进行转换

C++11 引入了 std::wstring_convert 类,可以用于字符串转换。这个类需要使用一个 std::locale 对象来指定转换所用的编码,常见的编码有 "utf-8""gbk"

下面的代码演示了如何将普通字符串转换成 std::wstring

#include <string>
#include <codecvt>

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

int main()
{
    std::string str = "Hello, world!";
    std::wstring wstr = s2ws(str);
}
使用 MultiByteToWideChar 进行转换

如果你需要使用更低层次的函数来进行字符串转换,可以使用 Windows API 中的 MultiByteToWideChar 函数。

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

std::wstring s2ws(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 result(buffer);
    delete[] buffer;
    return result;
}

int main()
{
    std::string str = "Hello, world!";
    std::wstring wstr = s2ws(str);
}
使用 wstringstream 进行转换

如果你需要在程序中频繁地进行字符串转换,可以使用 std::wstringstream 类。这个类可以将多个字符串插入到一个流中,然后通过流生成 std::wstring

下面的代码演示了如何使用 std::wstringstream 进行字符串转换:

#include <string>
#include <sstream>

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

int main()
{
    std::string str = "Hello, world!";
    std::wstring wstr = s2ws(str);
}

在以上三种方法中,使用 std::wstring_convert 是推荐的方法,因为它是最简单也是最通用的方法。如果你的程序只在 Windows 平台上运行,可以使用 MultiByteToWideChar;如果你需要高效地进行字符串转换,可以使用 std::wstringstream