Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прочитать файл неизвестной длины, прочитать файл неизвестной длины 
:(
    Опции темы
maxfox111
Дата 25.11.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



Помогите прочитать файл неизвестной длины. Есть файл, его надо прочитать в последовательность  байтов. Что бы потом пройти по ней и посчитать CRC. 

Код
   // получаем размер файла
   CRC_value = 0xFFFF;
   fseek(fA, 0, SEEK_END);
   Size=ftell(fA);
   fseek (fA, 0L, SEEK_SET);

   // выделяем память для указателя на последовательность с которой потом будем работать
   BYTE* MessageBYTE = new BYTE[Size];
   if (MessageBYTE != NULL)
   {
      memset(MessageBYTE, 0, Size);
      fread(&MessageBYTE, Size, 1, fART);
   }

   // считаем CRC
   for (i = 0; i<Size; i++)
   {
         index = ((CRC_value >> 8) ^ (int)MessageBYTE) & 0xFF;
         CRC_value = ((CRC_value & 0xFF) << 8) ^ lookup[index];
      }
      *MessageBYTE++;
   }
   fclose(fA);


1) Ф-ция       fread(&MessageBYTE, Size, 1, fART); насколько я понимаю не читает файл в мой указатель. Что не правильно?
2) Как в цикле проходить по последовательности. Я это делаю как "*MessageBYTE++;" Но насколько я понимаю это не правильно.
 

M
bsa
Не забываем пользоваться кнопочкой "Код"


Это сообщение отредактировал(а) bsa - 26.11.2008, 12:22
PM MAIL   Вверх
destrd
Дата 25.11.2008, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 1.10.2008

Репутация: нет
Всего: 4



Цитата(maxfox111 @  25.11.2008,  20:59 Найти цитируемый пост)
fread(&MessageBYTE, Size, 1, fART);

1) а почему у вас компилятор не ругается, у вас уже под MessageBYTE выделена память, отдаем просто MessageBYTE, а не &MessageBYTE
В memset главное правильно отдаёте, а в fread нет.
2) просто делайте MessageBYTE++

И вообще, что значит файл неизвестной длины, если вы её (длину) сразу определилиsmile

--------------------
Some people, when confronted with a problem, think, "I known, I'll use regular expressions." Now they have two problems.        -- Jamie Zawinski in comp.lang.emacs
PM MAIL ICQ   Вверх
bsa
Дата 26.11.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



destrd, компилятор не будет ругаться, так как BYTE* и BYTE** легко преобразуются к void*.
maxfox111, у тебя программа не работала, так как ты читал не в выделенную область памяти, а в то место, где лежит твой указатель, таким образом ты портил его. Короче, как сказал destrd - убери амперсанд в функции fread.
А вот тут все перепутано:
Код
 for (i = 0; i<Size; i++)
   {
         index = ((CRC_value >> 8) ^ (int)MessageBYTE) & 0xFF;
         CRC_value = ((CRC_value & 0xFF) << 8) ^ lookup[index];
      }
      *MessageBYTE++;
   }
   fclose(fA);
В первом случае, тебе нужен не адрес, а значение на которое он ссылается. Поэтому нужно писать просто *MessageBYTE. А во втором случае наоборот - тебе нужно инкрементировать адрес, а не значение переменной, поэтому, как писал destrd, нужно просто указать ++MessageBYTE.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2361 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.