[gull] crc récalcitrant
Arnaud
listes.00 at gmail.com
Sat Oct 15 17:22:37 CEST 2011
Le 14. 10. 11 21:45, Frédéric Benninger a écrit :
> Bonjour,
>
> Je me prend la tête sur le calcul d'un CRC en Perl.
>
> J' écris un script permettant de dialoguer avec une station météo
> utilisant le protocole UMB.
>
> Le protocole utilise une somme de contrôle sur 16 bits pour valider
> les trames. La doc dit que c'est un CRC-CCITT et donne un exemple
> en C.
>
> En Perl avec le script suivent j'obtiens 0xf134 et ce n'est pas un
> résultat valide pour la station météo. :-(
>
> #!/usr/bin/perl -w use strict; use Digest::CRC qw(crcccitt);
>
> my $ctx = Digest::CRC->new(type=>"crcccitt");
>
> $ctx->add('01234567');
>
> print $ctx->hexdigest . "\n";
>
> Par contre l'exemple en C ci-dessous retourne : 0xf843 ce qui
> devrait en théorie être valide car c'est dans la doc officielle du
> protocole UMB.
>
> Pouvez-vous me mettre sur une piste pour comprendre ce qui cloche?
Hello,
Je connais pas trop Perl, mais j'ai fait un test rapide, alors
peut-être comme ça ? (j'ai initialisé à 0xFFFF, et mis un CRC polynom
de 1021h).
Mais bon, ce calculateur online retourne aussi: 0xF134, mais il a un
CRC polynom de 1021
------
#!/usr/bin/perl -w
use strict;
use Digest::CRC qw(crcccitt crc);
my $ctx = Digest::CRC->new(type=>"crcccitt");
$ctx = Digest::CRC->new(width=>16, init=>0xFFFF, xorout=>0x0000,
poly=>0x1021, refin=>1, refout=>1, cont=>1);
$ctx->add("01234567");
print $ctx->hexdigest . "\n";
------
(ça donne le même résultat, et si je mets 123456789 dans le code c, le
perl me retourne dans les 2: 0x6F91)
Désolé si je suis à côté.
More information about the gull
mailing list