LINUX.ORG.RU

Perl: Как вычислить CRC8?


0

0

Здравствуйте! Есть такой функция на Си:
int crc8(const char* data)
{
const char *p;
int n, crc = 0xFFF;

for (p = data; *p; ++p) {
crc ^= *p << 8;
for (n = 0; n < 8; ++n)
crc = ((crc & 0x8000) ? (crc << 1) ^ 0x1021 : crc << 1);
}

return crc;
}

Если ей на вход подать "Hello" то она возвратит 2752308620.

И есть аналогичная функция на Perl:
sub crc8 {
my $data = shift;
my $crc = 0xFFF;
my $c = length($data);
for (my $i = 0; $i < $c; ++$i) {
$crc ^= ord(substr($data, $i, 1)) << 8;
for (my $n = 0; $n < 8; ++$n) {
$crc = (($crc & 0x8000) ? ($crc << 1) ^ 0x1021 : $crc << 1);
}
}
return $crc;
}

Если ей на вход подать "Hello" то она возвратит 19044467563357580

Почему?

Ответ на: комментарий от phoenix

Спасиб, а то я щас думал у меня мозг зависнет :)

anterior
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.