BMPファイルのファイルポインタを渡して先頭の2byteが'BM'かつ15byte目から4byteが40かどうか判定する関数作ったのですが

int Check_Type( FILE* fp )
{
unsigned char types[4];
unsigned int type=0,i,j,hexadd;

fseek( fp, 0, SEEK_SET );
if( fgetc(fp)!='B' && fgetc(fp)!='M' ){ return -1; }

fseek( fp, 14L, SEEK_SET );
fgets( types, sizeof(char)*4, fp );
for(i=0;i<4;++i){
hexadd=1;
for(j=0;j<i;++j){ hexadd*=16; }
type+=types[i] * hexadd;
}
if( type!=40 ){ return -1; }

return 1;
}
すごく汚いと思うのですが、こういうことをするときにこうすると綺麗になるとかありますか?