倒带流,包括 ifstream 和 strstream

Rewind a stream, both ifstream as well as strstream

我想写一个 HEX 文件reader。它应该支持两种不同的格式:Intel HEX 和“ROM”文件格式,其中每行包含一对地址和 16 位十六进制值。 reader 应标识格式。为此,它必须至少读取一些行以检查它是否至少是一种有效格式。

文件流应传递给 reader,函数如下:

class CHexFile { 
public:
    bool Open(std::istream& stream);
    uint16_t GetChunk(); // Return two bytes of the stream.
private:
    void Validate(std::istream& stream);
};

参数类型是 std::istream 因为这允许在单元测试器中准备 std::strstream 并将流传递给函数。

可以检测流格式并验证整个流。但是如何在验证(或格式检测)后倒回流并实际检索数据?

注意:我必须使用 2006 年的相当旧的 C++ 编译器(Paradigm)。因此我不能使用 C++1x 或 C++2x 中的奇特功能。

致电stream.clear(); stream.seekg(0, std::ios_base::beg);。这应该倒带任何可以倒带的流。当然有些istream是不能倒带的,比如std::cin,所以你要在seekg().

之后检查错误