Longhorn PHP 2026 - Call For Papers

base_convert

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

base_convertBir sayıyı keyfi tabanlar arasında dönüştürür

Açıklama

base_convert(string $sayı, int $kaynak_taban, int $hedef_taban): string

sayı değerinin hedef_taban tabanındaki gösterimini içeren bir dize döndürür. sayı değerinin verildiği taban kaynak_taban ile belirtilir. Hem kaynak_taban hem de hedef_taban uçlar dahil 2 ile 36 arasında olmalıdır. Tabanı 10'dan büyük sayılardaki rakamlar a-z harfleriyle gösterilir; a 10, b 11 ve z 35 anlamına gelir. Harflerin büyük ya da küçük olması farketmez, yani sayı harf büyüklüğüne duyarsız olarak yorumlanır.

Uyarı

base_convert(), dahili olarak kullanılan float türünün özellikleri nedeniyle büyük sayılarda hassasiyet kaybedebilir. Daha ayrıntılı bilgi ve kısıtlamalar için kılavuzdaki Gerçek sayılar bölümüne bakınız.

Bağımsız Değişkenler

sayı

Dönüştürülecek sayı. sayı içindeki geçersiz karakterler sessizce yok sayılır. PHP 7.4.0'dan itibaren geçersiz karakter aktarmak artık önerilmemektedir.

kaynak_taban

sayı değerinin bulunduğu taban.

hedef_taban

sayı değerinin dönüştürüleceği taban.

Dönen Değerler

sayı değerinin hedef_taban tabanına dönüştürülmüş hali.

Sürüm Bilgisi

Sürüm: Açıklama
7.4.0 Geçersiz karakter aktarmak artık bir önerilmiyor bildirimi üretir. Sonuç, geçersiz karakterler yokmuş gibi hesaplanmaya devam eder.

Örnekler

Örnek 1 base_convert() örneği

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

Yukarıdaki örneğin çıktısı:

101000110111001100110100

Ayrıca Bakınız

  • intval() - Bir değişkenin tamsayı değerini döndürür

add a note

User Contributed Notes 6 notes

up
95
PHPCoder at niconet2k dot com
14 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
6
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
7 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
21 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
8 years ago
<?php
    $v = base_convert(3.14, 10, 10);
    var_dump($v);
?>

output: string(3) "314"
up
4
cyrilbele at yahoo dot fr
17 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