Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 CRC   Alexandr Kostiuchenko   12 Jun 2000 03:08:04 
Архивное /ru.perl/284539445425.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional