base_convert

(PHP 4, PHP 5, PHP 7, PHP 8)

base_convertConvertit un nombre entre des bases arbitraires

Description

base_convert(string $num, int $from_base, int $to_base): string

Retourne une chaîne contenant l'argument num représenté dans la base to_base. La base de représentation de number est donnée par from_base. from_base et to_base doivent être compris entre 2 et 36 inclus. Les chiffres supérieurs à 10 des bases supérieures à 10 seront représentés par les lettres de A à Z, avec A = 10 et Z = 35. Le casse des lettres n'a pas d'importance, c'est à dire num est interprété de façon insensible à la casse.

Avertissement

base_convert() perdra la précision sur les grands nombres, à cause des propriétés interne du type float utilisé. Lire la section sur les nombres décimaux de ce manuel pour plus d'informations.

Liste de paramètres

num

Le nombre à convertir. Tout caractères invalides dans num sont ignorés silencieusement. À partir de PHP 7.4.0 fournir des caractères invalides est obsolète.

from_base

La base num dans laquelle il est

to_base

La base dans laquelle on doit convertir le nombre num

Valeurs de retour

Le nombre num converti dans la base to_base

Historique

Version Description
7.4.0 Passer des caractères invalides génèrera désormais une notice obsolète. Le résultat sera toujours calculé comme si les caractères invalides n'existaient pas.

Exemples

Exemple #1 Exemple avec base_convert()

<?php
$hexadecimal
= 'a37334';
echo
base_convert($hexadecimal, 16, 2);
?>

L'exemple ci-dessus va afficher :

101000110111001100110100

Voir aussi

  • intval() - Retourne la valeur numérique entière équivalente d'une variable

add a note

User Contributed Notes 6 notes

up
94
PHPCoder at niconet2k dot com
13 years ago
Convert an arbitrarily large number from any base to any base.

string convBase(string $numberInput, string $fromBaseInput, string $toBaseInput)
$numberInput number to convert as a string
$fromBaseInput base of the number to convert as a string
$toBaseInput base the number should be converted to as a string
examples for $fromBaseInput and $toBaseInput
'0123456789ABCDEF' for Hexadecimal (Base16)
'0123456789' for Decimal (Base10)
'01234567' for Octal (Base8)
'01' for Binary (Base2)
You can really put in whatever you want and the first character is the 0.
Examples:

<?php
convBase
('123', '0123456789', '01234567');
//Convert '123' from decimal (base10) to octal (base8).
//result: 173

convBase('70B1D707EAC2EDF4C6389F440C7294B51FFF57BB', '0123456789ABCDEF', '01');
//Convert '70B1D707EAC2EDF4C6389F440C7294B51FFF57BB' from hexadecimal (base16) to binary (base2).
//result:
//111000010110001110101110000011111101010110000101110
//110111110100110001100011100010011111010001000000110
//001110010100101001011010100011111111111110101011110
//111011

convBase('1324523453243154324542341524315432113200203012', '012345', '0123456789ABCDEF');
//Convert '1324523453243154324542341524315432113200203012' from senary (base6) to hexadecimal (base16).
//result: 1F9881BAD10454A8C23A838EF00F50

convBase('355927353784509896715106760','0123456789','Christopher');
//Convert '355927353784509896715106760' from decimal (base10) to undecimal (base11) using "Christopher" as the numbers.
//result: iihtspiphoeCrCeshhorsrrtrh

convBase('1C238Ab97132aAC84B72','0123456789aAbBcCdD', '~!@#$%^&*()');
//Convert'1C238Ab97132aAC84B72' from octodecimal (base18) using '0123456789aAbBcCdD' as the numbers to undecimal (base11) using '~!@#$%^&*()' as the numbers.
//result: !%~!!*&!~^!!&(&!~^@#@@@&

function convBase($numberInput, $fromBaseInput, $toBaseInput)
{
if (
$fromBaseInput==$toBaseInput) return $numberInput;
$fromBase = str_split($fromBaseInput,1);
$toBase = str_split($toBaseInput,1);
$number = str_split($numberInput,1);
$fromLen=strlen($fromBaseInput);
$toLen=strlen($toBaseInput);
$numberLen=strlen($numberInput);
$retval='';
if (
$toBaseInput == '0123456789')
{
$retval=0;
for (
$i = 1;$i <= $numberLen; $i++)
$retval = bcadd($retval, bcmul(array_search($number[$i-1], $fromBase),bcpow($fromLen,$numberLen-$i)));
return
$retval;
}
if (
$fromBaseInput != '0123456789')
$base10=convBase($numberInput, $fromBaseInput, '0123456789');
else
$base10 = $numberInput;
if (
$base10<strlen($toBaseInput))
return
$toBase[$base10];
while(
$base10 != '0')
{
$retval = $toBase[bcmod($base10,$toLen)].$retval;
$base10 = bcdiv($base10,$toLen,0);
}
return
$retval;
}
?>
up
7
ardavies at tiscali dot co dot uk
11 years ago
In order to convert base 26 (hexavigesimal) of just alphanumeric characters (A-Z), wthout integers, (as descibed at http://en.wikipedia.org/wiki/Hexavigesimal), I found this to be useful:

function base_convert_alpha( $str, $from, $to )
{
$r = range( 'A', 'Z' );
$clean = str_replace( $r, array_keys($r), $str );
return base_convert( $clean, $from, $to );
}

echo base_convert_alpha( "BAC", 26, 10 );

//$clean = 102 which then returns 678
up
10
Anonymous
6 years ago
While not immediately clear from the description above, a negative sign is also "silently ignored".

base_convert("-12", 10, 10) => 12
up
15
lindsay at bitleap dot com
20 years ago
If you need to use base_convert with numbers larger then 32 bit, the following gmp implementation of base_convert should work.

<?php

/*use gmp library to convert base. gmp will convert numbers > 32bit*/
function gmp_convert($num, $base_a, $base_b)
{
return
gmp_strval ( gmp_init($num, $base_a), $base_b );
}

?>
up
2
ohcc at 163 dot com
7 years ago
<?php
$v
= base_convert(3.14, 10, 10);
var_dump($v);
?>

output: string(3) "314"
up
4
cyrilbele at yahoo dot fr
16 years ago
If you want to do sharding, at some point you will need to decide which shard to target. Here is a simple function to assign the data to a particular shard based on a key (usually identifier of the row)

Here is a simple function to get the shard based on the key and the number of shards available

<?php
function getShard($key,$nbShards) {
$num = substr(base_convert(sha1($key), 16, 10),4,6);
return
$num%$nbShards;
}
?>
To Top