皆さんありがとうございます。

なるほど、0xffと & を取ればエンディアンに関係なくいちばん「桁」の
小さいところのバイトを取れるんですねー。

いちおう、こんなのでやってみます。。。

int read_mydata( FILE *fp, mydata *dp ){

if( read_int( fp, &(dp->x) ) == 0 ) return 0;
if( read_long( fp, &(dp->y) ) == 0 ) return 0;

return 1;
}

int read_long( FILE *fp, long *l ){

int i, c;
*l = 0;

/* 32bitまで */
for( i=0; i<4; i++ ){
if( ( c = fgetc( fp ) ) == EOF ){
return 0;
}
*l |= c;
*l <<= 8;
}

return 1;
}