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

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

std字符串到wstring - C++

在C++中,我们经常需要将一个字符序列从一个字符串类型转换为另一个字符串类型,比如从std::stringstd::wstring。下面我们将介绍如何进行这个转换。

方法一: 手动转换

我们可以使用循环遍历源字符串中的每个字符,并将它们一个一个地复制到目标字符串中。

#include <string>

std::string str = "Hello, world!";
std::wstring wstr = L"";

for (const char c : str) {
    wstr.push_back((wchar_t)c);
}

在这个例子中,我们使用了push_back函数将每个字符插入到目标字符串的尾部。

方法二: 使用boost库

另一个方法是使用boost库。boost库提供了许多C++标准库没有提供的功能,其中包括从std::stringstd::wstring的转换。

#include <string>
#include <boost/locale.hpp>

std::string str = "Hello, world!";
std::wstring wstr = boost::locale::conv::to_utf<wchar_t>(str, "UTF-8");

在这个例子中,我们使用boost::locale::conv::to_utf函数从std::stringstd::wstring进行转换。该函数需要两个参数:源字符串和目标字符串的字符集。在这里,我们将源字符串解释为UTF-8字符集,并将结果转换为宽字符。

方法三: 使用codecvt_facet

另一个方法是使用C++标准库的std::codecvt_facet头文件。这里我们首先需要定义一个std::wstringstream对象,并将源字符串插入到其中。

#include <string>
#include <sstream>
#include <locale>

std::string str = "Hello, world!";
std::wstringstream wss;
wss << std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes(str);
std::wstring wstr = wss.str();

在这个例子中,我们使用了std::wstring_convert类,它是C++标准库中用于字符串转换的类之一。它需要一个转换器类型作为参数,这里我们使用了std::codecvt_utf8代表源字符串使用UTF-8编码。from_bytes函数将源字符串中的字节序列转换为宽字符序列,并将其插入到std::wstringstream对象中。最后使用str函数返回宽字符序列。