cast / base-convert
基数转换。基于 https://php.ac.cn/manual/ru/function.base-convert.php#106546
0.4
2021-08-21 16:30 UTC
Requires
- php: ^7.2
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-09-21 23:12:49 UTC
README
将任意基数的大数转换为任意基数。
安装
composer require cast/base-convert
string convBase(string $numberInput, string $fromBaseInput, string $toBaseInput)
$numberInput
- 要转换的数字字符串
$fromBaseInput
- 要转换的数字的基数字符串
$toBaseInput
- 转换后数字应转换为的基数字符串
$fromBaseInput
和 $toBaseInput
的示例
0123456789ABCDEF
用于十六进制(基16)
0123456789
用于十进制(基10)
01234567
用于八进制(基8)
01
用于二进制(基2)
您可以输入任何内容,第一个字符是0。
示例
<?php require __DIR__.'/vendor/autoload.php'; use function Cast\convBase; 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; }
基于 https://php.ac.cn/manual/ru/function.base-convert.php#106546。