delight-im / base-convert
任意两个基数或字母表之间的转换
v1.1.0
2019-11-18 00:56 UTC
Requires
- php: >=5.6.0
- ext-gmp: *
- delight-im/alphabets: ^1.0
This package is auto-updated.
Last update: 2024-08-24 06:46:09 UTC
README
任意两个基数或字母表之间的转换
要求
- PHP 5.6.0+
- GMP (GNU 多精度) 扩展 (
gmp
)
- GMP (GNU 多精度) 扩展 (
安装
-
通过 Composer 包含库[?]
$ composer require delight-im/base-convert
-
包含 Composer 自动加载器
require __DIR__ . '/vendor/autoload.php';
使用方法
基数之间的转换
\Delight\BaseConvert\Base::convert( '101111000110011100011101110001110011100001000100010100111110', 2, 27 ); // string(13) "5HH1KDF77JELE" // or \Delight\BaseConvert\Base::convert( '2634460662', 8, 16 ); // string(8) "167261B2" // or \Delight\BaseConvert\Base::convert( 'BC671DC7384453E', 16, 10 ); // string(18) "848490771450709310"
注意: 通过 Base::convert
仅支持 2(含)到 62(含)之间的基数。对于更大的基数,必须使用 Alphabet::convert
并明确指定应使用的字母表。
字母表之间的转换
\Delight\BaseConvert\Alphabet::convert( '219', \Delight\BaseConvert\Alphabet::DECIMAL, \Delight\BaseConvert\Alphabet::ALPHANUMERIC_HUMAN ); // string(2) "Fw" // or \Delight\BaseConvert\Alphabet::convert( '1068880747392', \Delight\BaseConvert\Alphabet::DECIMAL, \Delight\BaseConvert\Alphabet::BINARY ); // string(40) "1111100011011110010000011101101110000000" // or \Delight\BaseConvert\Alphabet::convert( '3012001200067890000406780000912050034500', \Delight\BaseConvert\Alphabet::DECIMAL, \Delight\BaseConvert\Alphabet::ALPHANUMERIC_HUMAN ); // string(26) "4tYhrL3q7ydJrqrj4hp7WjHkWJ" // or \Delight\BaseConvert\Alphabet::convert( '4562245003000071200000100340005636710000', \Delight\BaseConvert\Alphabet::OCTAL, \Delight\BaseConvert\Alphabet::DECIMAL ); // string(36) "784790447634685127626847041410011136" // or \Delight\BaseConvert\Alphabet::convert( '127000450089A00000000BCD00604500323EF100', \Delight\BaseConvert\Alphabet::HEX, \Delight\BaseConvert\Alphabet::DECIMAL ); // string(48) "105259540817262448627958480599765632799008026880" // or \Delight\BaseConvert\Alphabet::convert( 'rxmMbcWYNVfH', \Delight\BaseConvert\Alphabet::ALPHA_HUMAN, \Delight\BaseConvert\Alphabet::DECIMAL ); // string(19) "1413192387433400246" // or \Delight\BaseConvert\Alphabet::convert( "\x44\x25\x31\x3d", \Delight\BaseConvert\Alphabet::BYTE, \Delight\BaseConvert\Alphabet::OCTAL ); // string(11) "10411230475"
可用的字母表
当将字母表传递给 Alphabet::convert
作为源或目标字母表时,可以使用仅由 ASCII 或单字节 UTF-8 字符组成的任何字母表。当然,给定的字母表中不允许任何单个字符重复出现。
或者,您可以使用以下预定义的字母表,这些字母表对于许多用途来说应该足够了
\Delight\BaseConvert\Alphabet::ALPHA; \Delight\BaseConvert\Alphabet::ALPHA_HUMAN; \Delight\BaseConvert\Alphabet::ALPHA_LOWERCASE; \Delight\BaseConvert\Alphabet::ALPHA_LOWERCASE_HUMAN; \Delight\BaseConvert\Alphabet::ALPHA_UPPERCASE; \Delight\BaseConvert\Alphabet::ALPHA_UPPERCASE_HUMAN; \Delight\BaseConvert\Alphabet::ALPHANUMERIC; \Delight\BaseConvert\Alphabet::ALPHANUMERIC_AND_PUNCTUATION_HUMAN; \Delight\BaseConvert\Alphabet::ALPHANUMERIC_HUMAN; \Delight\BaseConvert\Alphabet::ALPHANUMERIC_LOWERCASE; \Delight\BaseConvert\Alphabet::ALPHANUMERIC_LOWERCASE_HUMAN; \Delight\BaseConvert\Alphabet::ALPHANUMERIC_UPPERCASE; \Delight\BaseConvert\Alphabet::ALPHANUMERIC_UPPERCASE_HUMAN; \Delight\BaseConvert\Alphabet::ASCII_PRINTABLE; \Delight\BaseConvert\Alphabet::ASCII_PRINTABLE_HUMAN; \Delight\BaseConvert\Alphabet::BASE_32; \Delight\BaseConvert\Alphabet::BASE_58; \Delight\BaseConvert\Alphabet::BASE_64; \Delight\BaseConvert\Alphabet::BASE_64_URL; \Delight\BaseConvert\Alphabet::BASE_85; \Delight\BaseConvert\Alphabet::BINARY; \Delight\BaseConvert\Alphabet::BYTE; \Delight\BaseConvert\Alphabet::DECIMAL; \Delight\BaseConvert\Alphabet::DUODECIMAL; \Delight\BaseConvert\Alphabet::DUODECIMAL_LOWERCASE; \Delight\BaseConvert\Alphabet::DUODECIMAL_UPPERCASE; \Delight\BaseConvert\Alphabet::HEX; \Delight\BaseConvert\Alphabet::HEX_LOWERCASE; \Delight\BaseConvert\Alphabet::HEX_UPPERCASE; \Delight\BaseConvert\Alphabet::OCTAL; \Delight\BaseConvert\Alphabet::QUATERNARY; \Delight\BaseConvert\Alphabet::QUINARY; \Delight\BaseConvert\Alphabet::SENARY; \Delight\BaseConvert\Alphabet::TERNARY; \Delight\BaseConvert\Alphabet::VIGESIMAL; \Delight\BaseConvert\Alphabet::VIGESIMAL_LOWERCASE; \Delight\BaseConvert\Alphabet::VIGESIMAL_UPPERCASE;
内置 PHP 函数
如果您希望为任何大小的基数提供一个一致的接口,您可以将 PHP 的内置基数转换函数替换如下
\bindec($n)
可以替换为 …\Delight\BaseConvert\Base::convert($n, 2, 10)
\Delight\BaseConvert\Alphabet::convert($n, \Delight\BaseConvert\Alphabet::BINARY, \Delight\BaseConvert\Alphabet::DECIMAL)
\octdec($n)
可以替换为 …\Delight\BaseConvert\Base::convert($n, 8, 10)
\Delight\BaseConvert\Alphabet::convert($n, \Delight\BaseConvert\Alphabet::OCTAL, \Delight\BaseConvert\Alphabet::DECIMAL)
\decbin($n)
可以替换为 …\Delight\BaseConvert\Base::convert($n, 10, 2)
\Delight\BaseConvert\Alphabet::convert($n, \Delight\BaseConvert\Alphabet::DECIMAL, \Delight\BaseConvert\Alphabet::BINARY)
\decoct($n)
可以替换为 …\Delight\BaseConvert\Base::convert($n, 10, 8)
\Delight\BaseConvert\Alphabet::convert($n, \Delight\BaseConvert\Alphabet::DECIMAL, \Delight\BaseConvert\Alphabet::OCTAL)
\dechex($n)
可以替换为 …\Delight\BaseConvert\Alphabet::convert($n, \Delight\BaseConvert\Alphabet::DECIMAL, \Delight\BaseConvert\Alphabet::HEX_LOWERCASE)
\Delight\BaseConvert\Base::convert($n, 10, 16)
(大写)
\hexdec($n)
可以替换为 …\Delight\BaseConvert\Alphabet::convert($n, \Delight\BaseConvert\Alphabet::HEX, \Delight\BaseConvert\Alphabet::DECIMAL)
\Delight\BaseConvert\Base::convert($n, 16, 10)
\hex2bin($n)
可以替换为 …\Delight\BaseConvert\Alphabet::convert($n, \Delight\BaseConvert\Alphabet::HEX_LOWERCASE, \Delight\BaseConvert\Alphabet::BYTE)
\bin2hex($n)
可以替换为 …\Delight\BaseConvert\Alphabet::convert($n, \Delight\BaseConvert\Alphabet::BYTE, \Delight\BaseConvert\Alphabet::HEX_LOWERCASE)
base_convert($n, $fromBase, $toBase)
可以替换为 …\Delight\BaseConvert\Base::convert($n, $fromBase, $toBase)
贡献
所有贡献都受到欢迎!如果您想做出贡献,请先创建一个问题,这样您的功能、问题或疑问就可以进行讨论。
许可证
本项目受 MIT 许可证 的约束。