19/02/2010, 18:43:30
Bonjour,
On Feb 18, 2:01 pm, "Chrisophe Bruchez" <i...@accessnight.ch> wrote:
> exemple ESI5 :
>
> $knxval = hex($val[0]) * 256 + hex($val[1]);
>
> if (($knxval & 0x8000) != 0) { $sign = 1; } else { $sign = 0; }
> $exp = ($knxval >> 11) & 0x0f;
> $mant = $knxval & 0x07ff;
>
> if ($sign != 0) {
> # 2-complement
> $mant -= 1;
> $mant = ($mant ^0x07ff) & 0x07ff;
> }
>
> $val = $mant * (2 ** $exp) * 0.01;
>
> if ($sign != 0) { $val = -1 * $val; }
Juste par curiosité, et pour valider ma propre implémentation :
Pour 0x8000 le script ci-dessus renvoie la valeur 0.
Le résultat ne devrait-il pas être -20,48 ?
On Feb 18, 2:01 pm, "Chrisophe Bruchez" <i...@accessnight.ch> wrote:
> exemple ESI5 :
>
> $knxval = hex($val[0]) * 256 + hex($val[1]);
>
> if (($knxval & 0x8000) != 0) { $sign = 1; } else { $sign = 0; }
> $exp = ($knxval >> 11) & 0x0f;
> $mant = $knxval & 0x07ff;
>
> if ($sign != 0) {
> # 2-complement
> $mant -= 1;
> $mant = ($mant ^0x07ff) & 0x07ff;
> }
>
> $val = $mant * (2 ** $exp) * 0.01;
>
> if ($sign != 0) { $val = -1 * $val; }
Juste par curiosité, et pour valider ma propre implémentation :
Pour 0x8000 le script ci-dessus renvoie la valeur 0.
Le résultat ne devrait-il pas être -20,48 ?