|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexandr Kostiuchenko 2:463/468.5 12 Jun 2000 03:08:04 To : All Subject : CRC -------------------------------------------------------------------------------- помогите плз с написанием ф-ии расчета CRC для EMSI (16-bit CCITT polynomial). Стандартная CRC16 из String::CRC не подходит, unpack %16C* - тоже, попытался адаптировать паскалевскую - результат неверный. sub CRC16 { my $str = shift; my $crc = 0; for $k (0..length($str)) { $crc = $crc ^ (ord(substr($str,$k,1)) << 8); for (0..7) { $crc = (($crc & 0x8000) > 0 ? ($crc << 1) ^ 0x1021 : $crc << 1); } } $crc = $crc & 0xFFFF; return $crc; } исходная ф-я FUNCTION CRC16:word; var crc : longint; r : byte; begin crc:=0; for k:=1 to Size do begin crc:=(crc xor (ord(EMSI_DAT[k]) shl 8)); for r:=1 to 8 do if (crc and $8000)>0 then crc:=((crc shl 1) xor $1021) else crc:=(crc shl 1); end; CRC16:=(crc and $FFFF); END; где: EMSI_DAT - array of char, Size - его размер -- mailto: random at info.net.ua //Александр * Origin: useless (2:463/468.5) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/284539445425.html, оценка из 5, голосов 10
|