c++ - 如何将 std::istream 转换为 std::wistream

标签 c++ unicode stream ascii

我有一个 istream,一些代码需要一个 wistream。

我确实希望将源流的每个字符零扩展为 wchar_t。我不关心代码页,我不关心本地化,我只是想无缝地传输这个输入,最快的方法是什么?

最佳答案

您可以编写一个读取缓冲区,使 istream 中的底层流缓冲区适应您的 wistream:

class adapting_wistreambuf : public wstreambuf {
  streambuf *parent;
public:
  adapting_istreambuf(streambuf *parent_) : parent(parent_) { }
  int_type underflow() {
    return (int_type)parent->snextc();
  }
};

后来:

istream &somestream = ...;
adapting_wistreambuf sb(somestream.rdbuf());
wistream wistream(&sb);

// now work with wistream

这只实现了 streambuf 接口(interface)的最低限度。如果需要,您可以添加缓冲区管理代码以提高性能。

关于c++ - 如何将 std::istream 转换为 std::wistream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7623403/

相关文章:

python - 从在线流中记录的损坏的 AAC 文件

c++ - 将硬盘驱动器上的 BIT XXX 从 0 更改为 1

unicode - Mercurial 提交消息和日志,支持什么编码,Hg 关心吗?

unicode - 如何声明我的Simple MAPI提供程序DLL是Unicode并支持MapiSendMailW?

使用 printf 在控制台中使用 C++ unicode 字符?

Kotlin 协程 : Channel vs Flow

facebook 喜欢 box stream height

c++ - 在另一个类中使用一个类的对象

c++ - 如何通过缓冲区大小来优化读写?

c++ - 过滤一个 vector 并返回第 'n' 个元素