CRC-16/KERMIT Implementation



我正在使用以下功能来计算CRC。

function crc16_kermit($string) { 
       $crc = 0; 
       for ( $x=0; $x<strlen( $string ); $x++ ) { 
          $crc = $crc ^ ord( $string[$x] ); 
          for ($y = 0; $y < 8; $y++) { 
             if ( ($crc & 0x0001) == 0x0001 ) $crc = ( ($crc >> 1 ) ^ 0x8408 ); 
             else                             $crc =    $crc >> 1; 
          } 
       } 
       $lb  = ($crc & 0xff00) >> 8; 
       $hb  = ($crc & 0x00ff) << 8; 
       $crc = $hb | $lb; 
       return $crc; 
    }

,但没有按预期显示结果。IE;从此功能中,我将CRC作为" 2DE3",用于HEX值'6C20536574696F20322C31'。但是我需要将其视为" EB3E"。我在'https://crccalc.com/'中检查了值。

您的代码很好。您的测试是错误的。您没有将6c20...转换为二进制。2de3是ASCII字符串数字和字母的CRC。如果将其转换为二进制,则获得eb3e

虽然注意到,由于某种原因,例程的最后三行会逆转字节。因此,您将获得3eeb

最新更新