deff Monde de merde | bon j'en ai chi@#! mais je crois que j'ai réussi, mais il y a peut être des améliorations à faire.
voici les fonctions pour convertir un dword signé en float :
Code :
- function DWSign2NonSign($decsign){
- if ($decsign<0) {
- $decsign=4294967296-($decsign*-1);
- $decimal=$decsign;
- }
- else {
- $decimal=$decsign;
- }
- return $decimal;
- }
|
Code :
- function DWordToFloat($dword){
- if ($dword<0){
- $dword=$this->DWSign2NonSign($dword);
- $binstring=$this->Dec2Bin($dword,32);
- $exposant=substr($binstring,1,8);
- $exposant=bindec($exposant)-127;
- $mantisse="1.".substr($binstring,9,32);
- $valeur="1".substr($mantisse,2,$exposant);
- $entier=bindec($valeur);
- $decimale=substr($mantisse,$exposant+2,27);
- for ($i=0;$i<strlen($decimale);$i++){
- $denominateur=(pow(2,$i+1));
- $nominateur=substr($decimale,$i,1);
- $temp=(float)($temp+($nominateur/$denominateur));
- }
- $decimale=$temp;
- $valeur=($entier+$decimale)*-1;
- return $valeur;
- }
- else {
- $dword=$this->DWSign2NonSign($dword);
- $binstring=$this->Dec2Bin($dword,32);
- $exposant=substr($binstring,1,8);
- $exposant=bindec($exposant)-127;
- $mantisse="1.".substr($binstring,9,32);
- $valeur="1".substr($mantisse,2,$exposant);
- $entier=bindec($valeur);
- $decimale=substr($mantisse,$exposant+2,27);
- for ($i=0;$i<strlen($decimale);$i++){
- $denominateur=(pow(2,$i+1));
- $nominateur=substr($decimale,$i,1);
- $temp=$temp+($nominateur/$denominateur);
- }
- $decimale=$temp;
- $valeur=($entier+$decimale)*1;
- return $valeur;
- }
- }
|
Code :
- function FloatToDword($float){
- if ($float<0){
- $float=$float*-1;
- $entier=decbin(floor($float));
- $temp=($float-floor($float));
- for($i=0;$i<(23-strlen($entier));$i++){
- $temp=$temp*2;
- if($temp>=1){
- $decimale=$decimale."1";
- }
- else{
- $decimale=$decimale."0";
- }
- $temp=$temp-floor($temp);
- }
- $exposant=strlen($entier)-1+127;
- $exposant=decbin($exposant);
- $mantisse=substr($entier,1,strlen($entier)).$decimale;
- for ($i=0;$i<(23-strlen($mantisse));$i++){
- $mantisse=$mantisse."0";
- }
- $binstring="1".$exposant.$mantisse;
- $valeur=bindec($binstring);
- return $valeur;
- }
- else {
- $entier=decbin(floor($float));
- $temp=($float-floor($float));
- for($i=0;$i<(23-strlen($entier));$i++){
- $temp=$temp*2;
- if($temp>=1){
- $decimale=$decimale."1";
- }
- else{
- $decimale=$decimale."0";
- }
- $temp=$temp-floor($temp);
- }
- $exposant=strlen($entier)-1+127;
- $exposant=decbin($exposant);
- $mantisse=substr($entier,1,strlen($entier)).$decimale;
- for ($i=0;$i<(23-strlen($mantisse));$i++){
- $mantisse=$mantisse."0";
- }
- $binstring="0".$exposant.$mantisse;
- $valeur=bindec($binstring);
- return $valeur;
- }
- }
|
si ça intéresse quelqu'un!!?? ---------------
-->>C'est l'histoire d'un gars qui rêve qu'il mange de la guimauve.Il se réveille et il a plus d'oreiller.<<--
|