Если вы работаете с неформатированным вводом, вам, вероятно, следует читать напрямую в двоичном виде. Обычно вы используете какую-то директиву, специфичную для компилятора, для создания структур данных без заполнения, а затем просто для чтения / записи из файла.
// Gcc
#pragma pack(1) // option 1: pragmas
struct frame {
std::uint32_t header;
std::uint16_t data[8];
} __attribute((packed)); // option 2: packed attribute
#pragma pack(0)
bool operator==( data const & lhs, data const & rhs )
{
bool result = lhs.header == rhs.header;
for ( int i = 0; i < 8; ++i )
{
result &= lhs.data[i] == rhs.data[i];
}
return result;
}
int main()
{
frame data = { 10, 1, 2, 3, 4, 5, 6, 7, 8 };
std::ofstream out( "data.bin", ofstream::binary );
out.write( reinterpret_cast<char*>(&data), sizeof(data) );
out.close();
std::ifstream in( "data.bin", ifstream::binary );
frame readed;
in.read( reinterpret_cast<char*>(&readed), sizeof(readed) );
in.close();
std::cout << (readed == data) << std::endl; // 1
}
Директива компилятора для отключения заполнения для VS может отличаться (я считаю, что директива pragma работает как в gcc, так и в VS, но я всегда использовал этот атрибут).