1バイトめがchar型で、2、3、4、5バイトめがfloat型のファイルから読み込むときに、

ifs >> buf_1 >> buf_4f;
と
ifs.read ((char*)&buf_1, 1);
ifs.read ((char*)&buf_4f, 4);

で結果が違うのですが、そういうものでうか?
>>を使うと不正な値(例えば0)が読み込まれます。
readを使うと正しい値が読み込めます。