|
|
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
|