Pat*_*ryk 0 c++ binaryfiles istream readfile
我有以下代码:
std::istream is;
// ... stream initialization ...
while(is)
{
uint32_t next4Bytes = 0;
is.read(reinterpret_cast<char*>(&next4Bytes), 4);
if(next4Bytes == 218893066)
{
is.seekg(-4, std::ios_base::cur);
break;
}
else
is.seekg(-3, std::ios_base::cur);
}
Run Code Online (Sandbox Code Playgroud)
有没有比reinterpret_cast<char*>
从4个字节读std::istream
入更好的方法uint32_t
?(显然不是c式演员)
小智 5
您可能希望将该转换包装在模板化读取器函数中:
template<typename T>
std::streamsize read(T* out, std::istream& stream, size_t count=1) {
stream.read(reinterpret_cast<char*>(out), sizeof(T)*count);
return stream.gcount();
}
Run Code Online (Sandbox Code Playgroud)
如果您不关心读取数组,您甚至可以省略count参数并使其更简单.有一些方法可以根据自己的需要进行修改.如果您对实际读取的值有多少感兴趣而不是读取了多少字节,则可以将它除以sizeof(T),而不是只返回gcount.(这与fread的返回值的工作方式非常相似).或者如果不能读取所有数据,您可以抛出异常.
归档时间: |
|
查看次数: |
269 次 |
最近记录: |