Changement de base d'un nombre

Contenu du snippet

Prend un nombre $nb en entrée exprimé selon une base $base1 et renvoi sa valeur selon une base $base2.
Les bases courantes (binaire, octale, décimale, hexadécimale) sont supportées, deplus il est facile d'en ajouter de nouvelles plus "exotique".
Cette fonction peut être utile en général, par exemple pour passer une couleur au format hexadécimal en format RGB, etc etc...à vous d'en faire l'usage que vous voudrez.

Source / Exemple :


<?php
/*************************************************************************

  • cvt_base.php
  • -------------------
  • débuté/begin : Lun 30 Août 2004 / Mon August 30 2004
  • copyright : (C) 2004 Le Gal Antoine
  • email : antoinelegal@free.fr
*
  • $Id: cvt_base.php,v 1.0 2004/08/30 19:28:01 .Cocoon. [cryzalid.net] $
*
                                                                                                                                                  • /
/*************************************************************************
  • [FR]
  • Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou
  • le modifier conformément aux dispositions de la Licence Publique
  • Générale GNU, telle que publiée par la Free Software Foundation ;
  • version 2 de la licence, ou encore (à votre choix) toute version
  • ultérieure.
*
  • [EN]
  • This program is free software; you can redistribute it and/or modify
  • it under the terms of the GNU General Public License as published by
  • the Free Software Foundation; either version 2 of the License, or
  • (at your option) any later version.
*
                                                                                                                                                  • /
//-------------------------------------------------------------------------\\ // Résumé/Summary: //---------------- // Fonction de conversion entre les bases courantes: // - binaire (base 2) // - octale (base 8) // - décimale (base 10) // - hexadécimale (base 16) // // Convertion function between usual bases: // - binary (base 2) // - octal (base 8) // - decimal (base 10) // - hexadecimal (base 16) //-------------------------------------------------------------------------\\ //-------------------------------------------------------------------------\\ // Synoptique/Synoptic: //--------------------- // // string base2base (string nb, string base1, string base2) // // nb : nombre à convertir / number to convert // base1 ou/or base2: 'bin' -> Binaire/Binary // 'oct' -> Octale/Octal // 'dec' -> Décimale/decimal // 'hex' -> Hexadécimale/Hexadecimal // // Le nombre "nb" est converti de la "base1" vers la "base2". // The number "nb" is converted from "base1" to "base2". // // Nota: // La syntaxe du tableau "base" devrai vous permettre d'ajouter autant // de nouvelle base non conventionnelle que possible. // // Syntax of "base" array should help you to add new unconventionnal base. //-------------------------------------------------------------------------\\ function base2base($nb,$base1,$base2) { $base=array('bin'=>array('sca'=>2, 'from'=>array(0,1), 'to'=>array(0,1)), 'oct'=>array('sca'=>8, 'from'=>array(0,1,2,3,4,5,6,7), 'to'=>array(0,1,2,3,4,5,6,7)), 'dec'=>array('sca'=>10, 'from'=>array(0,1,2,3,4,5,6,7,8,9), 'to'=>array(0,1,2,3,4,5,6,7,8,9)), 'hex'=>array('sca'=>16, 'from'=>array(0,1,2,3,4,5,6,7,8,9,'A'=>10,'B'=>11,'C'=>12,'D'=>13,'E'=>14,'F'=>15), 'to'=>array(0,1,2,3,4,5,6,7,8,9,10=>'A',11=>'B',12=>'C',13=>'D',14=>'E',15=>'F'))); $tmp=NULL;$i=0; while($i<(strlen($nb))) { $tmp=($tmp*$base[$base1]['sca'])+($base[$base1]['from'][$nb[$i]]); $i++; } $tmp; $nb=NULL; while($tmp!=0) { $nb=$base[$base2]['to'][$tmp%$base[$base2]['sca']].$nb; $tmp=floor($tmp/$base[$base2]['sca']); } return $nb; } /*************************************************************************/

Conclusion :


pour avoir un exemple d'utilisation de cette fonction rendez-vous à cette addresse (où vous pourrez également télécharger directement la source):
http://maitre.cryzalid.net/cvt_base.php

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.