0

我正在尝试在 和 的帮助下处理 UTF-16 字符串(放置在缓冲区中buf)。此代码中出现异常。我的代码有问题吗?还是 gcc 的 STL 不能处理(16 位)符号?std::basic_stringistringstreamstd::bad_castunsigned int

const unsigned short * buf;
// ... fiilling buf
std::basic_string<unsigned short> w(buf);
std::basic_istringstream<unsigned short> iss(w);

unsigned int result;
try { iss >> result; }
catch (std::exception& e)
{
   const char * c = e.what();
}

std::wstring相同的代码std::wistringstream可以正常工作。

4

1 回答 1

1

char在不同的字符类型上实例化IOStreams 是相当重要wchar_t的。流需要存在许多std::locale方面。没有它们,它们将无法正常运行。对于您需要的尝试操作,至少:

  • std::ctype<cT>
  • std::numpunct<cT>
  • std::num_get<cT>

cT流的字符类型在哪里。其中最后一个应该只需要实例化,但其他需要实现。当然,您还需要std::locale通过将其设置为全局语言环境或使用stream.imbue().

就个人而言,我认为这总体上是错误的方法:字符应该在进入系统时转换为内部表示,并在离开系统时转换为外部表示(这就是std::codecvt<...>方面的目的)。然而,这似乎是一场失败的战斗,人们觉得他们想在内部搞乱编码。

于 2013-10-07T12:35:36.013 回答