18/05/2011, 19:43:55
> Entretemps, j'ai trouvé une routine PHP sur le forum allemand...
Il se pourrais que ce ne soit pas la bonne fonction de conversion.
On m'a tuyauté vers les librairies eibd client, effectivement, il y a
2 fonctions de conversion
J'ai essayé
function f2_decode($val)
{
$exp = ($val[0] & 0x78) >> 3;
$sign = ($val[0] & 0x80) >> 7;
$mant = ($val[0] & 0x07) << 8 | $val[1];
if ($sign)
$sign = -1 << 11;
else
$sign = 0;
$val = ($mant | $sign) * pow (2, $exp) * 0.01;
return $val;
}
qui ne donne pas le bon résultat et
function f2_encode($val)
{
if($val<0)
{
$sign = 1;
$val = - $val;
}
else
$sign = 0;
$val = $val * 100.0;
$exp = 0;
while ($val > 2047)
{
$exp ++;
$val = $val / 2;
}
if ($sign)
$val = - $val;
$val = $val & 0x7ff;
return array(($sign << 7) | (($exp & 0x0f)<<3)| (($val >> 8)&0x07),
($val& 0xff));
}
qui semble être la bonne, mais que je n'arrive pas à faire marcher, ou
bien je ne sais pas m'en servir avec cet array
Il se pourrais que ce ne soit pas la bonne fonction de conversion.
On m'a tuyauté vers les librairies eibd client, effectivement, il y a
2 fonctions de conversion
J'ai essayé
function f2_decode($val)
{
$exp = ($val[0] & 0x78) >> 3;
$sign = ($val[0] & 0x80) >> 7;
$mant = ($val[0] & 0x07) << 8 | $val[1];
if ($sign)
$sign = -1 << 11;
else
$sign = 0;
$val = ($mant | $sign) * pow (2, $exp) * 0.01;
return $val;
}
qui ne donne pas le bon résultat et
function f2_encode($val)
{
if($val<0)
{
$sign = 1;
$val = - $val;
}
else
$sign = 0;
$val = $val * 100.0;
$exp = 0;
while ($val > 2047)
{
$exp ++;
$val = $val / 2;
}
if ($sign)
$val = - $val;
$val = $val & 0x7ff;
return array(($sign << 7) | (($exp & 0x0f)<<3)| (($val >> 8)&0x07),
($val& 0xff));
}
qui semble être la bonne, mais que je n'arrive pas à faire marcher, ou
bien je ne sais pas m'en servir avec cet array