27/05/2010, 20:32:09
Salut
Selon la terminologie KNX, le flottant sur 16 bits correspondant au
data types 9.*.
Voici l'algo de décodage (en Perl) que j'utilise
Considérant que data[1] contient l'octet de poids fort, et data[2]
l'octet de poids faible du mot de 16 bits.
my $sign = $data[1] & 0x80;
my $exp = ($data[1] & 0x78) >> 3;
my $mant = (($data[1] & 0x7) << 8) | $data[2];
$mant = -(~($mant - 1) & 0x7ff) if $sign != 0;
$val = (1 << $exp) * 0.01 * $mant;
return $val;
En d'autres termes, le 16 bits est décomposé en :
- 1 bit de signe (bit 15)
- 4 bits d'exposant
- 11 bits de mantisse, avec complément à 2 pour les négatifs
Alain
Selon la terminologie KNX, le flottant sur 16 bits correspondant au
data types 9.*.
Voici l'algo de décodage (en Perl) que j'utilise
Considérant que data[1] contient l'octet de poids fort, et data[2]
l'octet de poids faible du mot de 16 bits.
my $sign = $data[1] & 0x80;
my $exp = ($data[1] & 0x78) >> 3;
my $mant = (($data[1] & 0x7) << 8) | $data[2];
$mant = -(~($mant - 1) & 0x7ff) if $sign != 0;
$val = (1 << $exp) * 0.01 * $mant;
return $val;
En d'autres termes, le 16 bits est décomposé en :
- 1 bit de signe (bit 15)
- 4 bits d'exposant
- 11 bits de mantisse, avec complément à 2 pour les négatifs
Alain