[gull] crc récalcitrant

Frédéric Benninger benninger at sunrise.ch
Sat Oct 15 18:55:34 CEST 2011


Génial merci Arnaud,

T'imagine pas le temps que j'ai passé là dessus, je ne comprend pas
comment je suis passé à côté.

Si on se croise un de ces quartes n’hésite pas a me rappeler que je te
dois au minimum une bière!

Salutations
  Frédéric


Le 15 octobre 2011 17:22, Arnaud <listes.00 at gmail.com> a écrit :
> 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