Haz*_*Dot 3 c++ iostream stream binary-data
我有一个定义为的数据结构
struct myDataStruct
{
int32_t header;
int16_t data[8];
}
Run Code Online (Sandbox Code Playgroud)
我想获取一个字符流并将其转换为myData流.我应该扩展哪个流类?我想创建一个自定义流类,以便我可以做类似的事情
myDataStruct myData;
myDataStruct myDataArray[10];
myDataStream(ifstream("mydatafile.dat"));
myDataStream.get(myData);
myDataStream.read(myDataArray, 10);
Run Code Online (Sandbox Code Playgroud)
而不是myDataStream.get(myData)
,你做的是operator>>
数据类型的重载:
std::istream& operator>>(std::istream& is, myDataStruct& obj)
{
// read from is into obj
return is;
}
Run Code Online (Sandbox Code Playgroud)
如果你想读入一个数组,只需写一个循环:
for( std::size_t idx=0; idx<10; ++idx )
{
myDataStruct tmp;
if( is >> tmp )
myDataArray[idx] = tmp;
else
throw "input stream broken!";
}
Run Code Online (Sandbox Code Playgroud)
使用函数模板,您还应该能够为右侧的数组重载运算符(但我从未尝试过):
template< std::size_t N >
std::istream& operator>>(std::istream& is, myDataStruct (&myDataArray)[N])
{
// use loop as above, using N instead of the 10
}
Run Code Online (Sandbox Code Playgroud)
但我无法确定这是华丽还是卑鄙.