Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2015.12.06;
Скачать: [xml.tar.bz2];

Вниз

crc   Найти похожие ветки 

 
nokia4ever   (2014-06-16 04:17) [0]

Требуется расчет crc32 с применением полинома и без таблиц.

Полиномы для crc32 (на wiki есть)
CRC-32-IEEE 802.3
0x04C11DB7 / 0xEDB88320 / 0x82608EDB

Хорошее описание по проблеме нашлось тут http : / / www.miscel.dk/MiscEl/CRCcalculations.html
+ тут програмка для сверки http : / / www.miscel.dk/MiscEl/miscelCRCandChecksum.html
(еще проверялось на hashtab и Fsum frontend 1.5)

{для CRC32:
The following polynomial are used:
Normal Inverted/reversed/reflected
$04C11DB7 $EDB88320 Std. }

//CRC32 bit, normal
function crc32(Buffer:String;Polynom,Initial:Cardinal):Cardinal;
var i,j: Integer;
begin
Result:=Initial;
for i:=1 to Length(Buffer) do begin
 Result:=Result xor (ord(buffer[i]) shl 24);
 for j:=0 to 7 do begin
   if (Result and $80000000)<>0 then Result:=(Result shl 1) xor Polynom
   else Result:=Result shl 1;
   end;
 end;
end;

Переделываю под себя (d"xe6)

Function Crc32(Const Buffer:PByte;Const Size,Polynom,Initial:Cardinal):Cardinal; // crc32 bit, normal
var j:Cardinal;i:Byte;
begin
Result:=Initial;If Size=0 Then Exit;
for j:=0 to size-1 do begin Result:=Result xor (buffer[j] shl 24);
for i:=0 to 7 do if (Result and $80000000)<>0 then Result:=(Result shl 1) xor Polynom else Result:=Result shl 1;
end;
//Result:=Result and $ffffffff; // вроде как в конце должно быть?
//Result:=not Result; // вроде как результат должен инвертировать?
end;

применяю

...
var p,i,it:cardinal;sa:ansistring;pd:pbyte;
begin
sa:="123456789"; //"hello word";
i:=length(sa);
getmem(pd,i);
move(sa[1],pd^,i);
p:=$04C11DB7; // полином
it:=$FFFFFFFF; // начальное значение
showmessage(inttohex(crc32(pd,i,p,it),8));
freemem(pd,i);
end;

для ansi строки "123456789" crc32=CBF43926
я получаю $0376E6E7
если отремить результы, то $FC891918
где ошибка?


 
nokia4ever   (2014-06-16 04:18) [1]

++в ссылках пробелы убрать в начале кто захочет посмотреть - не вставлялось иначе


 
nokia4ever   (2014-06-16 04:26) [2]

++

http://i63.fastpic.ru/big/2014/0616/52/5ef5aba01b6abe69b39d13062fcf1952.png

вот тут видно, что я гдето рядом уже и значения совпадают (при отреме).
но там чтобы получить CBF43926 галки должны стоять слева.


 
rumma   (2014-06-19 09:54) [3]

ну что, нет идей?


 
Rouse_ ©   (2014-06-19 18:58) [4]

У меня есть реализация, но на ассемблере, если подойдет могу дать...


 
Rouse_ ©   (2014-06-19 19:40) [5]

Кстати по поводу картинки, он не правильно считает.
Контрольная сумма от этой строки "123456789" - с учетом кавычек и стандартного полинома $EDB88320 будет $83593021, а он показывает $2BC0589F.


 
brother ©   (2014-06-19 20:59) [6]

зы. судя по скрину, очень сильно напоминает, оформление как рекомендовалось в http://delphimaster.net/view/1-1401910050/


 
nokia4ever   (2014-06-20 09:40) [7]

2 Rouse_ [4]
нет спасибо, нужен pas

2 Rouse_ [5]
считает правильно, если галки слева включены. а когда выключены - это промежуточный результат (с которым совпадает рез.то что выше, правда с другим полиномом).

и ваша crc неверна. посмотрите даже на вики (на поиск crc там) есть проверочные суммы

Name : CRC 32
Width : 32
 Poly : 04C11DB7
 Init : FFFFFFFF
RefIn : True
RefOut : True
XorOut : FFFFFFFF
Check : CBF43926

вы наверное считаете от строки (string=UnicodeString(WideString), 2 байта на символ) а не от ансистроки (string=ansistring, 1 байт на символ)


 
nokia4ever   (2014-06-20 09:41) [8]

или полином не тот


 
nokia4ever   (2014-06-20 09:42) [9]

http://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4


 
Rouse_ ©   (2014-06-20 12:27) [10]


> вы наверное считаете от строки (string=UnicodeString(WideString),
>  2 байта на символ) а не от ансистроки (string=ansistring,
>  1 байт на символ)

Я считал от анси строки, собственно и не я один, можешь проверить вот тут: http://crc32.ru/


 
DVM ©   (2014-06-20 13:12) [11]

На картинке правильно посчитана CRC. Это вариант CRC32 для BZIP. Из моего юнита:
////////////////////////////////////////////////////////////////////////////////
//   Name   : "CRC-32/BZIP2"
//   Alias  : "B-CRC-32"
//   Alias  : "CRC-32/AAL5"
//   Alias  : "CRC-32/DECT-B"
//   Width  : 32
//   Poly   : 04C11DB7
//   Init   : FFFFFFFF
//   RefIn  : False
//   RefOut : False
//   XorOut : FFFFFFFF
//   Check  : FC891918
////////////////////////////////////////////////////////////////////////////////

Сам юнит https://yadi.sk/d/OtktzFO4UCpCS но там вычисления табличные. Хотя переделать не сложно.


 
DVM ©   (2014-06-20 13:20) [12]

Кавычки там не надо учитывать, кстати


 
nokia4ever   (2014-06-20 16:17) [13]

спасибо, вечером посмотрю


 
nokia4ever   (2014-06-20 16:22) [14]

++
кстати не могли бы пояснить:

RefIn : True
RefOut : True
XorOut : FFFFFFFF - вот это значит, что конечный результат xor+ff..ff, а первые два так понимаю "переворачивание" входных и выходных данных? что под этим кроется и как это реализовывается? это все байты с другого конца читаются или речь про биты идет? если можно то с примером небольшим.


 
DVM ©   (2014-06-20 17:08) [15]


> nokia4ever   (20.06.14 16:22) [14]

там в файле есть некоторые комментарии на этот счет в его шапке


 
DVM ©   (2014-06-20 17:12) [16]

вот все на русском разжевано http://www.rsdn.ru/article/files/classes/SelfCheck/crcguide.pdf


 
nokia4ever   (2014-06-21 01:54) [17]

ansi chr(3)
пока. инфы достаточно пока. если что - спрошу еще ;)


 
nokia4ever   (2014-06-21 05:22) [18]

Удалено модератором
Примечание: Создание пустых сообщений



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2015.12.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.345 c
15-1428065850
БарЛог
2015-04-03 15:57
2015.12.06
Электрика для дома. Так получилось.


15-1428355804
Юрий
2015-04-07 00:30
2015.12.06
С днем рождения ! 7 апреля 2015 вторник


15-1428528989
Кто б сомневался
2015-04-09 00:36
2015.12.06
Как такие ярлыки делать?: MyProgram://MyID


6-1277274057
night_light
2010-06-23 10:20
2015.12.06
передача нескольких изображений по сети


15-1429047002
Юрий
2015-04-15 00:30
2015.12.06
С днем рождения ! 15 апреля 2015 среда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский