| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 21.04.2005
Сообщения: 117
![]() |
Проблема с 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)
|
|
|