#! perl -slw use strict; sub crc16 { use constant POLY => 0x8408; my $crc = 0; for my $c ( unpack 'C*', $_[0] ) { $crc ^= $c; for my $b ( 0 .. 7 ) { my $carry = $crc & 1; $crc >>= 1; if( $carry ) { $crc ^= POLY; } } } return $crc; } my $data = "\x64\x01"; printf "crc: %04x\n", crc16( $data ); __END__ C:\test>997760.pl crc: 13bc