其他分享
首页 > 其他分享> > 如何在C中将字符串转换为wstring

如何在C中将字符串转换为wstring

作者:互联网

我编写了一些代码,但是有一些问题.在这个代码中我试图将字符串转换为wstring.但是这个字符串有“█”字符.这个字符有219个ascii代码.
此转换获取错误.

在我的代码中:
string strs =“█and█something”;
          wstring wstr(strs.begin(),strs.end());

调试后,我得到这样的结果
 ?还有别的东西

我该如何解决这个问题?

谢谢…

解决方法:

用于在系统的窄编码和宽编码之间进行转换的C库解决方案使用来自< cwchar>的mbsrtowcs和wcsrtombs函数.头.我在this answer拼写了这个.

在C 11中,您可以使用使用合​​适的codecvt方面实例化的wstring_convert模板.不幸的是,这需要一些自定义装配,这在cppreference page上有详细说明.

我在这里将它改编成一个自包含的例子,它将wstring转换为字符串,从系统的宽度转换为系统的窄编码:

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

// utility wrapper to adapt locale-bound facets for wstring/wbuffer convert
template <typename Facet>
struct deletable_facet : Facet
{
    using Facet::Facet;
};

int main()
{
    std::wstring_convert<
        deletable_facet<std::codecvt<wchar_t, char, std::mbstate_t>>> conv;

    std::wstring ws(L"Hello world.");
    std::string ns = conv.to_bytes(ws);

    std::cout << ns << std::endl;
}

标签:c,string,wstring
来源: https://codeday.me/bug/20190927/1824164.html