Advertisement
Guest User

Untitled

a guest
Feb 9th, 2016
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.68 KB | None | 0 0
  1. <?php
  2. class Numeration
  3. {
  4. //Intervalles des bases de conversion prises en compte
  5. const MIN_BASE = 2;
  6. const MAX_BASE = 36;
  7.  
  8. //Constantes des bases de conversion
  9. const DECIMAL = 10;
  10. const BINAIRE = 2;
  11. const OCTAL = 8;
  12. const HEXADECIMAL = 16;
  13.  
  14. //Tableau d'équivalence de conversion (jusqu'à la base 36)
  15. private $_aConvertReference;
  16.  
  17. ################################################
  18. /**
  19.  
  20.  
  21. Constructeur.
  22.  
  23. Initialise le tableau d'équivalence de conversion.
  24.  
  25. /
  26.  
  27.  
  28. public function __construct()
  29. {
  30. $this->_aConvertReference = array( 0 => '0', 1 => '1', 2 => '2', 3 => '3', 4 => '4', 5 => '5', 6 => '6', 7 => '7', 8 => '8', 9 => '9',
  31. 10 => 'A', 11 => 'B', 12 => 'C', 13 => 'D', 14 => 'E', 15 => 'F', 16 => 'G', 17 => 'H', 18 => 'I', 19 => 'J',
  32. 20 => 'K', 21 => 'L', 22 => 'M', 23 => 'N', 24 => 'O', 25 => 'P', 26 => 'Q', 27 => 'R', 28 => 'S', 29 => 'T',
  33. 30 => 'U', 31 => 'V', 32 => 'W', 33 => 'X', 34 => 'Y', 35 => 'Z' );
  34. }
  35.  
  36. ################################################
  37. /**
  38.  
  39.  
  40. Permet de convertir un nombre d'une base quelconque à la base décimale.
  41.  
  42. @param INTEGER $iXBase La base du nombre à convertir.
  43.  
  44. @param INTEGER $iNumber Le nombre à convertir.
  45.  
  46. @param BOOLEAN $bWrite Affiche le résultat.
  47.  
  48. @return INTEGER Le nombre converti de la base $iXBase à la base décimale.
  49.  
  50. /
  51.  
  52.  
  53. public function convertXBaseToDec( $iXBase, $iNumber, $bWrite = false )
  54. {
  55. if( $iXBase < self::MIN_BASE || $iXBase > self::MAX_BASE )
  56. exit( '<b>Fatal error !</b> $iXbase [' . $iXBase . '] must be between ' . self::MIN_BASE . ' and ' . self::MAX_BASE . '.' );
  57.  
  58. //On prépare le nombre à convertir
  59. $iNumber = ltrim( $iNumber, '0' );
  60. $iNumber = strtoupper( $iNumber );
  61.  
  62. $iNumberLength = strlen( $iNumber );
  63. $iResConvert = 0;
  64.  
  65. //On test la possibilité de la conversion
  66. $sKeyMax = 0;
  67. for( $i=0; $i<$iNumberLength; $i++ )
  68. if( array_search( $iNumber[$i], $this->_aConvertReference ) > $sKeyMax )
  69. $sKeyMax = array_search( $iNumber[$i], $this->_aConvertReference );
  70.  
  71. if( $sKeyMax >= $iXBase )
  72. exit( '<b>Fatal error !</b> Impossible to convert : $iNumber [' . $iNumber. '] contains invalid characters (not in $iXBase [' . $iXBase . ']).' );
  73.  
  74. //On converti
  75. for( $i=0; $i<$iNumberLength; $i++ )
  76. $iResConvert += array_search( $iNumber[$i], $this->_aConvertReference ) * pow( $iXBase, ($iNumberLength - $i - 1) );
  77.  
  78. //Affichage
  79. if( $bWrite )
  80. echo 'Résult : <b>(' . $iNumber . ')<sub>' . $iXBase . '</sub> = (' . $iResConvert . ')<sub>' . self::DECIMAL . '</sub></b><br/>';
  81.  
  82. return $iResConvert;
  83. }
  84.  
  85. ################################################
  86. /**
  87.  
  88.  
  89. Permet de convertir un nombre de la base décimale à une base quelconque.
  90.  
  91. @param INTEGER $iXBase La base dans laquelle on veut convertir le nombre.
  92.  
  93. @param INTEGER $iNumber Le nombre à convertir.
  94.  
  95. @param BOOLEAN $bWrite Affiche le résultat.
  96.  
  97. @return INTEGER Le nombre converti de la base décimale à la base $iXBase.
  98.  
  99. /
  100.  
  101.  
  102. public function convertDecToXBase( $iXBase, $iNumber, $bWrite = false )
  103. {
  104. if( $iXBase < self::MIN_BASE || $iXBase > self::MAX_BASE )
  105. exit( '<b>Fatal error !</b> $iXbase [' . $iXBase . '] must be between ' . self::MIN_BASE . ' and ' . self::MAX_BASE . '.' );
  106.  
  107. if( is_nan( $iNumber ) )
  108. exit( '<b>Fatal error !</b> $iNumber [' . $iNumber . '] must be an integer.' );
  109.  
  110. //Initialisation des variables
  111. $i = 0;
  112. $bLastLoop = false;
  113. $aRes = array();
  114.  
  115. //Conversion
  116. $iTemp = $iNumber;
  117. $iRes = $iNumber / $iXBase;
  118.  
  119. while( floor( $iRes ) != 0 || !$bLastLoop )
  120. {
  121. if( floor( $iRes ) == 0 )
  122. $bLastLoop = true;
  123.  
  124. $aRes[$i] = $iTemp % $iXBase;
  125. $i++;
  126.  
  127. $iTemp = $iRes;
  128. $iRes = $iRes / $iXBase;
  129. }
  130.  
  131. $aConvertArray = array_reverse( $aRes );
  132. $sConvertResult = '';
  133.  
  134. for( $i=0; $i< count($aConvertArray); $i++ )
  135. $sConvertResult .= $this->_aConvertReference[$aConvertArray[$i]];
  136.  
  137. //Affichage
  138. if( $bWrite )
  139. echo 'Résult : <b>(' . $iNumber . ')<sub>' . self::DECIMAL . '</sub> = (' . $sConvertResult . ')<sub>' . $iXBase . '</sub></b><br/>';
  140.  
  141.  
  142. return $sConvertResult;
  143. }
  144.  
  145. ################################################
  146. /**
  147.  
  148.  
  149. Permet de convertir un nombre d'une base quelconque à une base quelconque.
  150.  
  151. @param INTEGER $iXBaseFrom La base du nombre à convertir.
  152.  
  153. @param INTEGER $iXBaseTo La base dans laquelle on veut convertir le nombre.
  154.  
  155. @param INTEGER $iNumber Le nombre à convertir.
  156.  
  157. @param BOOLEAN $bWrite Affiche le résultat.
  158.  
  159. @return INTEGER Le nombre converti de la base $iXBaseFrom à la base $iXBaseTo.
  160.  
  161. /
  162.  
  163.  
  164. public function convertXBaseToXBase( $iXBaseFrom, $iXBaseTo, $iNumber, $bWrite = false )
  165. {
  166. if( $iXBaseFrom < self::MIN_BASE || $iXBase > self::MAX_BASE )
  167. exit( '<b>Fatal error !</b> $iXbaseFrom [' . $iXBaseFrom . '] must be between ' . self::MIN_BASE . ' and ' . self::MAX_BASE . '.' );
  168.  
  169. if( $iXBaseTo < self::MIN_BASE || $iXBase > self::MAX_BASE )
  170. exit( '<b>Fatal error !</b> $iXbaseTo [' . $iXBaseTo . '] must be between ' . self::MIN_BASE . ' and ' . self::MAX_BASE . '.' );
  171.  
  172. $iConvert1 = $this->convertXBaseToDec( $iXBaseFrom, $iNumber );
  173. $iConvert2 = $this->convertDecToXBase( $iXBaseTo, $iConvert1 );
  174.  
  175. //Affichage
  176. if( $bWrite )
  177. echo 'Résult : <b>(' . $iNumber . ')<sub>' . $iXBaseFrom . '</sub> = (' . $iConvert2 . ')<sub>' . $iXBaseTo . '</sub></b><br/>';
  178.  
  179. return $iConvert2;
  180. }
  181. }
  182.  
  183. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement