delight-im/base-convert

任意两个基数或字母表之间的转换

v1.1.0 2019-11-18 00:56 UTC

This package is auto-updated.

Last update: 2024-08-24 06:46:09 UTC


README

任意两个基数或字母表之间的转换

要求

  • PHP 5.6.0+
    • GMP (GNU 多精度) 扩展 (gmp)

安装

  1. 通过 Composer 包含库[?]

    $ composer require delight-im/base-convert
    
  2. 包含 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 许可证 的约束。