Movatterモバイル変換


[0]ホーム

URL:


PHP 8.5.0 Alpha 2 available for testing
    bindec »
    « atanh

    base_convert

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

    base_convertConvert a number between arbitrary bases

    Description

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

    Returns a string containingnum represented in baseto_base. The base in whichnum is given is specified infrom_base. Bothfrom_base andto_base have to be between 2 and 36, inclusive. Digits in numbers with a base higher than 10 will be represented with the letters a-z, with a meaning 10, b meaning 11 and z meaning 35. The case of the letters doesn't matter, i.e.num is interpreted case-insensitively.

    Warning

    base_convert() may lose precision on large numbers due to properties related to the internalfloat type used. Please see theFloating point numbers section in the manual for more specific information and limitations.

    Parameters

    num

    The number to convert. Any invalid characters innum are silently ignored. As of PHP 7.4.0 supplying any invalid characters is deprecated.

    from_base

    The basenum is in

    to_base

    The base to convertnum to

    Return Values

    num converted to baseto_base

    Changelog

    VersionDescription
    7.4.0 Passing invalid characters will now generate a deprecation notice. The result will still be computed as if the invalid characters did not exist.

    Examples

    Example #1base_convert() example

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

    The above example will output:

    101000110111001100110100

    See Also

    • intval() - Get the integer value of a variable

    Found A Problem?

    Learn How To Improve This PageSubmit a Pull RequestReport a Bug
    add a note

    User Contributed Notes6 notes

    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: !%~!!*&!~^!!&(&!~^@#@@@&

    functionconvBase($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;
    }
    ?>
    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 athttp://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
    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
    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*/
    functiongmp_convert($num,$base_a,$base_b)
    {
    return
    gmp_strval(gmp_init($num,$base_a),$base_b);
    }

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

    output: string(3) "314"
    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
    functiongetShard($key,$nbShards) {
    $num=substr(base_convert(sha1($key),16,10),4,6);
    return
    $num%$nbShards;
    }
    ?>
    add a note
    To Top
    and to navigate •Enter to select •Esc to close
    PressEnter without selection to search using Google

    [8]ページ先頭

    ©2009-2025 Movatter.jp