You could use a template for your endian swap that will be generalized for the data types:
#include
template
void endswap(T *objp)
{
unsigned char *memp = reinterpret_cast(objp);
std::reverse(memp, memp + sizeof(T));
}
Then your code would end up looking something like:
file.read( reinterpret_cast(&i_var) , sizeof(int) );
endswap( &i_var );
file.read( reinterpret_cast(&d_var) , sizeof(double) );
endswap( &d_var );
cout << i_var << " " << d_var << endl;