倒带流,包括 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()
.
之后检查错误
我想写一个 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()
.