关于fstream read函数的有关问题

关于fstream read函数的问题
我在用标准C++编写一个BMP文件读写的程序,不用MFC,使用fstream中的read函数从BMP文件中读取文件头信息,代码如下:

fstream   bmpfile;
bmpfile.open(filename,ios::in|ios::binary);
if(!bmpfile)
return   FALSE;
bmpfile.read((char*)(&m_BMPHEADER),sizeof(m_BMPHEADER));

文件头结构体为:
typedef   unsigned   short WORD;
typedef   unsigned   long DWORD;
typedef   unsigned   char BYTE;
typedef   char CHAR;
typedef   long LONG;
typedef   int                                 BOOL;
#define   FALSE 0;
#define   TRUE -1;

typedef   struct   tagBITMAPFILEHEADER
{
WORD   bfType; //   位图文件的类型,必须为BM
DWORD   bfSize; //   位图文件的大小,以字节为单位
WORD   bfReserved1; //   位图文件保留字,必须为0
WORD   bfReserved2l; //   位图文件保留字,必须为0
DWORD   bfOffBits; //   位图数据的起始位置,以相对于位图
//   文件头的偏移量表示,以字节为单位
}BITMAPFILEHEADER;

读取的结果是有问题的,第一个成员WORD   bfType读了4个字节,但是只存储了两个字节,也有可能不是这么解释,相关实验数据如下:

源文件数据:
00000000h:42   4D   86   7F   06   00   00   00   00   00   36   04   00   00   28   00   00   00   FC

结果的结构体数据为:
WORD   bfType   19778   (7F   86   4D   42   只保留了4D   42)
DWORD   bfSize   6   (00   00   00   06)
WORD   brReserved1   0   (00   00)
WORD   brReserved2   1078   (04   36)
DWORD   bfOffBits   2621440   (00   28   00   00)

请高手指点问题所在,以及改进办法,十分感谢!

------解决方案--------------------
read
Syntax:

#include <fstream>
istream& read( char* buffer, streamsize num );

The function read() is used with input streams, and reads num bytes from the stream before placing them in buffer. If EOF is encountered, read() stops, leaving however many bytes it put into buffer as they are.

For example:

struct {
int height;
int width;
} rectangle;

input_file.read( (char *)(&rectangle), sizeof(rectangle) );
if( input_file.bad() ) {
cerr < < "Error reading data " < < endl;
exit( 0 );
}

------解决方案--------------------
数据对齐可是基本常识啊, 呵呵
------解决方案--------------------
呵~记得之前这里还有人问了一个问题,也是数据对齐的原因~~~