[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