2016-06-12 117 views
1

如何在不进行任何提取的情况下从std::istream读取固定数量的字节?例如,我有一个变量sz类型size_t,我想从istream读取sizeof(size_t)字节。如何从C++读取固定数量的字节std :: istream

void foo(std::istream& is) { 
    if(is.rdbuf()->in_avail() < sizeof(size_t)) return; 
    // how to read to sz from istream is without extraction (advancing pointers) 
    size_t sz; 
} 
+1

当你说“不做任何提取”时,你是什么意思?读取方法怎么样?它适用于你的“没有做任何提取”? – AnatolyS

+0

'固定字节数据'是没有意义的。请不要发明自己的术语。 – EJP

回答

1

只有peek下一个字符没有提取。因此,你应该改变你的策略:不要试图避免提取,而是提取你需要的字符,然后恢复流的状态。这是可能的,如果流支持求:

  • 使用tellg来获得当前位置
  • 提取字节
  • 使用seekg跳到前面的位置

否则,您可能需要通过“阅读而不提取”来实现你自己的缓冲区来做你想要达到的目标。