【问题标题】:Convert std::basic_string<wchar_t> and std::basic_string<uint16_t>转换 std::basic_string<wchar_t> 和 std::basic_string<uint16_t>
【发布时间】:2015-07-23 04:38:39
【问题描述】:

在 MacOS X 10.10 CLang 中:

typedef basic_string<char, char_traits<char>, allocator<char> > string;
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;

我构建了一个字符串,例如: std::wstringstream ss;

ss << "[";
ss << "{";
ss << "x1:" << 111 << ",";
ss << "z1:" << 111;
ss << "},";
ss << "{";
ss << "x2:" << 222 << ",";
ss << "z2:" << 222;
ss << "}";
ss << "]";
std::wstring str = ss.str();

并且需要将str 作为参数传递给需要std::basic_string&lt;uint16_t&gt; 并返回相同类型字符串的函数。

如何在std::basic_string&lt;wchar_t&gt;和std::basic_string&lt;uint16_t&gt;之间进行转换以使用外部库函数?

允许使用 C++11。

也许使用wstring_convert 或一些解决方法?

【问题讨论】:

标签: c++ string c++11 stl wstring


【解决方案1】:

首先,您需要确定源 std::basic_string&lt;wchar_t&gt; 与输入 std::basic_string&lt;uint16_t&gt; 具有相同的编码。如果编码不同,您应该寻找特定的字符编码转换算法。否则你可以这样做。

std::basic_string<uint16_t> result;
std::copy(source.begin(), source.end(), std::back_inserter(result));

【讨论】:

  • 不起作用。 (27010,0x1029b7000) malloc: *** error for object 0x600000256bf0: Invalid pointer dequeued from free list *** set a breakpoint in malloc_error_break to debug
  • 试试这个 std::back_inserter(result)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 2017-03-10
  • 2011-12-04
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
相关资源
最近更新 更多