IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Проблема с fread() (https://www.imho.ws/showthread.php?t=104182)

ktulu 27.05.2006 23:32

Проблема с 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)

СпасибО!

crawler 28.05.2006 09:39

int readbytes;
readbytes = fread(&boot, 1, 62, ff);

посмотри че получилось

ktulu 28.05.2006 12:48

Как и ожидалось, 62. Я по бйтам выводил всю переменную boot - читаются именно нужные 62 байта. То есть проблема не с самой fread(), а скорее с определением того места в уже прочитанной переменной, где начинается short-число.


Часовой пояс GMT +4, время: 03:57.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.