Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> расчет CRC(контрольной суммы) для Record, расчет контрольной суммы записи 
V
    Опции темы
Flashboy
Дата 24.3.2011, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Суть задачи в том что существует массив записей,
необходимо посчитать контрольную сумму(CRC32 к примеру) каждой записи и записать в отдельный массив.
В моем случае проблема выходит такая, что при расчете совершенно одинаковых записей(по значению) CRC32 хэш получается разный.
Код

type
TFInfoRec = Record
      Name: String;
      Size: Cardinal;
      LastAcc: TDateTime;
      Hash: String[8];
   Public
       Constructor SetValues(Const FName: String; Const FSize: Int64; Const FDateTime: TDateTime; Const FHash: ShortString);//
   End;
var
MassRec: Array[0..10000] Of TFInfoRec;
HashArr:Array[0..10000] Of String[8];
Implementation
Constructor TFInfoRec.SetValues(Const FName: String; Const FSize: Int64; Const FDateTime: TDateTime; Const FHash: ShortString);
Begin
   Self.Name := FName;
   Self.Size := FSize;
   Self.LastAcc := FDateTime;
   Self.Hash := FHash;
End;
//...
//...
Procedure Calculate;
Var 
i:Integer;
TD:TDateTime;
begin
TD:=Now;
for i:=0 to 10000 do
begin
MassRec[i].SetValues('Nicola Tesla',256,TD,'FDE2FFAA');
HashArr[i]:=IntToHex(GetCRC32(MassRec[i],SizeOf(MassRec[i])));
end;
end;

Каким образом верно рассчитать контрольную сумму CRC32 для Record, может быть кто-то сталкивался?
GetCRC32() использовался различный, возможно неверно.

Это сообщение отредактировал(а) Flashboy - 24.3.2011, 15:32
PM MAIL ICQ   Вверх
cat512
Дата 24.3.2011, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну проверить то просто! Если GetCrc32 возвращает разный хэш от константной строки, то значит проблема в GetCrc32, если нет то проблшема с реализацией алгоритма

Добавлено @ 16:55
На сколько я помню в Crc32 хэш 4-х байтный, и входной параметр буфера должен быть 4-х байтный.
А у тебя запись более 16 байт. Далее, в записи у тебя параметр указатель на строку, который при каждом перераспределении памяти будет иметь разное значение! поэтому у тебя и Хэш разный

Добавлено @ 16:59
Замени Name: string и hash: string, на array [0..MaxValue] of char; В этом варианте, память расходуется не эффективно, но зато работать будет корректно!

Это сообщение отредактировал(а) cat512 - 24.3.2011, 17:02
PM MAIL   Вверх
Flashboy
Дата 24.3.2011, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблема оказалось вот в чем:
1. Структура содержала Constructor
2. элемент структуры  Name: String; - строка неопределенной величины.

После таких изменений все заработало:
Код

type
TFInfoRec = Record
      Name: ShortString; //Изменили String на ограниченную до 255 символов ShortString
      Size: Cardinal;
      LastAcc: TDateTime;
      Hash: String[8];
   Public
       Procedure SetValues(Const FName: String; Const FSize: Int64; Const FDateTime: TDateTime; Const FHash: ShortString);//Конструктор был заменен на процедуру
   End;
//..............
//.................
Implementation
Procedure TFInfoRec.SetValues(Const FName: String; Const FSize: Int64; Const FDateTime: TDateTime; Const FHash: ShortString);
Begin
   Self.Name := FName;
   Self.Size := FSize;
   Self.LastAcc := FDateTime;
   Self.Hash := FHash;
End



Это сообщение отредактировал(а) Flashboy - 24.3.2011, 17:16
PM MAIL ICQ   Вверх
Flashboy
Дата 24.3.2011, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



cat512, спасибо. Сам пришел к тому же только другим путем.
PM MAIL ICQ   Вверх
cat512
Дата 24.3.2011, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Cheers!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




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


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

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