>>159
OSを疑う前に、まず

unsigned short s;
を
unsigned char s[2];
に変更し、

fread (&s, sizeof (unsigned short), 1, fp);
fprintf (stdout, "s = %d\n", s);
を
fread (s, sizeof(s), 1, fp);
printf("s[] = 0x%02x:0x%02x\n", s[0], s[1]);
に変更して、試してみるように。

> 値は10進数に変換すると、
> 9676になるはずですが、
> 上のプログラムでは値が異なってました。

どうせ52261って表示されたんだろ? それで合ってるんだよ。
「big endian」と「little endian」でぐぐれ。

まず自分のミスを疑えっていうのは、プログラミングを
勉強する上での基本だ。