Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Numeration
- {
- //Intervalles des bases de conversion prises en compte
- const MIN_BASE = 2;
- const MAX_BASE = 36;
- //Constantes des bases de conversion
- const DECIMAL = 10;
- const BINAIRE = 2;
- const OCTAL = 8;
- const HEXADECIMAL = 16;
- //Tableau d'équivalence de conversion (jusqu'à la base 36)
- private $_aConvertReference;
- ################################################
- /**
- Constructeur.
- Initialise le tableau d'équivalence de conversion.
- /
- public function __construct()
- {
- $this->_aConvertReference = array( 0 => '0', 1 => '1', 2 => '2', 3 => '3', 4 => '4', 5 => '5', 6 => '6', 7 => '7', 8 => '8', 9 => '9',
- 10 => 'A', 11 => 'B', 12 => 'C', 13 => 'D', 14 => 'E', 15 => 'F', 16 => 'G', 17 => 'H', 18 => 'I', 19 => 'J',
- 20 => 'K', 21 => 'L', 22 => 'M', 23 => 'N', 24 => 'O', 25 => 'P', 26 => 'Q', 27 => 'R', 28 => 'S', 29 => 'T',
- 30 => 'U', 31 => 'V', 32 => 'W', 33 => 'X', 34 => 'Y', 35 => 'Z' );
- }
- ################################################
- /**
- Permet de convertir un nombre d'une base quelconque à la base décimale.
- @param INTEGER $iXBase La base du nombre à convertir.
- @param INTEGER $iNumber Le nombre à convertir.
- @param BOOLEAN $bWrite Affiche le résultat.
- @return INTEGER Le nombre converti de la base $iXBase à la base décimale.
- /
- public function convertXBaseToDec( $iXBase, $iNumber, $bWrite = false )
- {
- if( $iXBase < self::MIN_BASE || $iXBase > self::MAX_BASE )
- exit( '<b>Fatal error !</b> $iXbase [' . $iXBase . '] must be between ' . self::MIN_BASE . ' and ' . self::MAX_BASE . '.' );
- //On prépare le nombre à convertir
- $iNumber = ltrim( $iNumber, '0' );
- $iNumber = strtoupper( $iNumber );
- $iNumberLength = strlen( $iNumber );
- $iResConvert = 0;
- //On test la possibilité de la conversion
- $sKeyMax = 0;
- for( $i=0; $i<$iNumberLength; $i++ )
- if( array_search( $iNumber[$i], $this->_aConvertReference ) > $sKeyMax )
- $sKeyMax = array_search( $iNumber[$i], $this->_aConvertReference );
- if( $sKeyMax >= $iXBase )
- exit( '<b>Fatal error !</b> Impossible to convert : $iNumber [' . $iNumber. '] contains invalid characters (not in $iXBase [' . $iXBase . ']).' );
- //On converti
- for( $i=0; $i<$iNumberLength; $i++ )
- $iResConvert += array_search( $iNumber[$i], $this->_aConvertReference ) * pow( $iXBase, ($iNumberLength - $i - 1) );
- //Affichage
- if( $bWrite )
- echo 'Résult : <b>(' . $iNumber . ')<sub>' . $iXBase . '</sub> = (' . $iResConvert . ')<sub>' . self::DECIMAL . '</sub></b><br/>';
- return $iResConvert;
- }
- ################################################
- /**
- Permet de convertir un nombre de la base décimale à une base quelconque.
- @param INTEGER $iXBase La base dans laquelle on veut convertir le nombre.
- @param INTEGER $iNumber Le nombre à convertir.
- @param BOOLEAN $bWrite Affiche le résultat.
- @return INTEGER Le nombre converti de la base décimale à la base $iXBase.
- /
- public function convertDecToXBase( $iXBase, $iNumber, $bWrite = false )
- {
- if( $iXBase < self::MIN_BASE || $iXBase > self::MAX_BASE )
- exit( '<b>Fatal error !</b> $iXbase [' . $iXBase . '] must be between ' . self::MIN_BASE . ' and ' . self::MAX_BASE . '.' );
- if( is_nan( $iNumber ) )
- exit( '<b>Fatal error !</b> $iNumber [' . $iNumber . '] must be an integer.' );
- //Initialisation des variables
- $i = 0;
- $bLastLoop = false;
- $aRes = array();
- //Conversion
- $iTemp = $iNumber;
- $iRes = $iNumber / $iXBase;
- while( floor( $iRes ) != 0 || !$bLastLoop )
- {
- if( floor( $iRes ) == 0 )
- $bLastLoop = true;
- $aRes[$i] = $iTemp % $iXBase;
- $i++;
- $iTemp = $iRes;
- $iRes = $iRes / $iXBase;
- }
- $aConvertArray = array_reverse( $aRes );
- $sConvertResult = '';
- for( $i=0; $i< count($aConvertArray); $i++ )
- $sConvertResult .= $this->_aConvertReference[$aConvertArray[$i]];
- //Affichage
- if( $bWrite )
- echo 'Résult : <b>(' . $iNumber . ')<sub>' . self::DECIMAL . '</sub> = (' . $sConvertResult . ')<sub>' . $iXBase . '</sub></b><br/>';
- return $sConvertResult;
- }
- ################################################
- /**
- Permet de convertir un nombre d'une base quelconque à une base quelconque.
- @param INTEGER $iXBaseFrom La base du nombre à convertir.
- @param INTEGER $iXBaseTo La base dans laquelle on veut convertir le nombre.
- @param INTEGER $iNumber Le nombre à convertir.
- @param BOOLEAN $bWrite Affiche le résultat.
- @return INTEGER Le nombre converti de la base $iXBaseFrom à la base $iXBaseTo.
- /
- public function convertXBaseToXBase( $iXBaseFrom, $iXBaseTo, $iNumber, $bWrite = false )
- {
- if( $iXBaseFrom < self::MIN_BASE || $iXBase > self::MAX_BASE )
- exit( '<b>Fatal error !</b> $iXbaseFrom [' . $iXBaseFrom . '] must be between ' . self::MIN_BASE . ' and ' . self::MAX_BASE . '.' );
- if( $iXBaseTo < self::MIN_BASE || $iXBase > self::MAX_BASE )
- exit( '<b>Fatal error !</b> $iXbaseTo [' . $iXBaseTo . '] must be between ' . self::MIN_BASE . ' and ' . self::MAX_BASE . '.' );
- $iConvert1 = $this->convertXBaseToDec( $iXBaseFrom, $iNumber );
- $iConvert2 = $this->convertDecToXBase( $iXBaseTo, $iConvert1 );
- //Affichage
- if( $bWrite )
- echo 'Résult : <b>(' . $iNumber . ')<sub>' . $iXBaseFrom . '</sub> = (' . $iConvert2 . ')<sub>' . $iXBaseTo . '</sub></b><br/>';
- return $iConvert2;
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement