我下了如下一段程序:
typedef struct {
u8 BS_jmpBoot[3];
u8 BS_OEMName[8];
u16 BPB_BytesPerSec;
u8 BPB_SecPerClus;
u16 BPB_RsvdSecCnt;
u8 BPB_NumFATs;
u16 BPB_RootEntCnt;
u16 BPB_TotSec16;
u8 BPB_Media;
u16 BPB_FATSz16;
u16 BPB_SecPerTrk;
u16 BPB_NumHeads;
u32 BPB_HiddSec;
u32 BPB_TotSec32;
u8 BS_DrvNum;
u8 BS_Reservedl;
u8 BS_BootSig;
u32 BS_VolID;
u8 BS_VolLab[11];
u8 BS_FilSysType[8];
u8 ExecutableCode[448];
u8 ExecutableMarker[2];
}_BPB ;// 定义BPB
u8 BUFFER[512];
u16 BPB_BytesPerSec;
u8 BPB_SecPerClus;
u16 BPB_RsvdSecCnt;
u8 BPB_NumFATs;
u16 BPB_RootEntCnt;
u16 BPB_TotSec16;
u16 BPB_FATSz16;
u32 BPB_HiddSec;
u8 ReadBPB(void) //读BPB
{
u8 response;
_BPB *BPB=(_BPB*)BUFFER;
response=ReadFATSector(0);
if(response==1)
return 1;
BPB_BytesPerSec = BPB->BPB_BytesPerSec;
BPB_SecPerClus = BPB->BPB_SecPerClus;
BPB_RsvdSecCnt = BPB->BPB_RsvdSecCnt;
BPB_NumFATs = BPB->BPB_NumFATs;
BPB_RootEntCnt = BPB->BPB_RootEntCnt;
BPB_TotSec16 = BPB->BPB_TotSec16;
BPB_FATSz16 = BPB->BPB_FATSz16;
BPB_HiddSec = BPB->BPB_HiddSec;
return response;
}
但我执行我上面的程序后,我的BUFFER里面装的512个字节是对的,但是我一执行完这句:
_BPB *BPB=(_BPB*)BUFFER;
BPB里面装的值就不对了,BPB自动把BUFFER数组里面第四位BUFFER[3]给丢了而自动把后面的给填充上来了
具体的如下图
跪求高人指教