imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 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 вне форума  
Старый 28.05.2006, 09:39     # 2
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
int readbytes;
readbytes = fread(&boot, 1, 62, ff);

посмотри че получилось
crawler вне форума  
Старый 28.05.2006, 12:48     # 3
ktulu
Junior Member
 
Аватар для ktulu
 
Регистрация: 21.04.2005
Сообщения: 117

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


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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