Показать сообщение отдельно
Старый 27.05.2006, 23:32     # 1
ktulu
Junior Member
 
Аватар для ktulu
 
Регистрация: 21.04.2005
Сообщения: 117

ktulu Путь к славе только начался
Проблема с fread()

Всем привет!

У меня возникла проблема - С пропускает 0х00 при чтении fread'ом. Причем если читать по одному байту, то все ок, а если по два (например, short int) - то пропускает 0х00 и сотрит на след. байт. Т.е. при последовательности ... 0х00 0х02 0х01 ... и чтении с начала этого фрагмента числа формата short выдает в 16-ричном виде не 0х0200, а 0х0102. Код прилагается =)

Код:
typedef unsigned char BYTE;
typedef unsigned short int WORD;
typedef unsigned int DWORD;

struct BS
{
   //...    
    BYTE boot_jmp[3];              //JUMP к загрузчику
    BYTE oem_name[8];           //Имя ОС, как правило игнорируется
    short bytes_per_sec;      //Кол-во байт в секторе
   //...
} boot;       

int main(int argc, char *argv[])
{char *buff=new char [62];
FILE *ff;
ff=fopen("fat12.img", "rb"); 
fread(&boot, 1, 62, ff);             
for (int i=0;i<sizeof(boot.oem_name);i++)
    cout<<hex<<int(boot.oem_name[i])<<endl;
//Выводим то,что перед bytes_per_sec
    cout<<hex<<boot.bytes_per_sec<<endl;
//Собссно bytes_per_sec, должно быть 512 (0х0200), а получается 0х0102, по порядку в файле записано так, как указано в посте (00h 02h 01h)
СпасибО!
ktulu вне форума