simplito / bigint-wrapper-php
php_gmp 和 php_bcmath 模块的通用接口
This package is not auto-updated.
Last update: 2024-09-21 20:18:04 UTC
README
信息
这个库是 php_gmp 和 php_bcmath 模块的通用接口。它自动检测支持的模块并使用其中最好的(gmp > bcmath)。Gmp 非常快,但在许多托管服务中缺失 -- 这就是为什么创建这个包装器的原因。它被用于 PrivMX WebMail 软件的加密函数中。
安装
您可以通过 Composer 安装此库
composer require simplito/bigint-wrapper-php
文档
如果您想强制使用特定的实现,则定义常量 S_MATH_BIGINTEGER_MODE - 将其设置为 "gmp" 或 "bcmath"。如果您不这样做,操作模式和常量将被自动设置。
如果没有 gmp 和 bcmath 模块,将抛出异常。如果您想防止这种情况,请简单地定义 S_MATH_BIGINTEGER_QUIET 常量。
此库的所有函数都作为位于 BI 命名空间下的 BigInteger 类的成员实现。BigInteger 的实例是不可变的 - 成员函数通常返回 BigInteger 类的新实例。
ConvertibleToBi - 一个占位符类型
为了使以下文档更易于阅读,我们使用了 "ConvertibleToBi" 类型符号,实际上它可以是指以下类型之一
- BigInteger 类的实例
- 一个整数
- 一个十进制字符串
- 一个 gmp 资源或类(仅在您处于 gmp 模式时)
如果您有一个非十进制字符串并想使用它,首先必须使用以下方式将其转换为 BigInteger 类
new BigInteger($myNonDecimalString, $baseOfMyNonDecimalString)
BI\BigInteger 类成员
构造函数 (ConvertibleToBi $value = 0, int $base = 10)
创建一个新的 BigInteger 实例。如果您传递一个无效值,将抛出异常。如果 $base === true,则传递的 $value 将被使用,而无需任何检查和转换。支持的基数:2,10,16,256。
- GMP 实现: gmp_init + bin2hex(对于 256 基数)
- Bcmath 实现: custom(bcadd + bcmul)
static BigInteger|false createSafe(ConvertibleToBi $value = 0, int $base = 10)
以与构造函数相同的方式创建一个新的 BigInteger 实例,但如果发生错误,则返回 false 而不是抛出异常。
BigInteger add(ConvertibleToBi $x)
添加数字
- GMP 实现: gmp_add
- Bcmath 实现: bcadd
BigInteger sub(ConvertibleToBi $x)
减去数字
- GMP 实现: gmp_sub
- Bcmath 实现: bcsub
BigInteger mul(ConvertibleToBi $x)
乘以数字
- GMP 实现: gmp_mul
- Bcmath 实现: bcmul
BigInteger div(ConvertibleToBi $x)
除以数字
- GMP 实现: gmp_div_q
- Bcmath 实现: bcdiv
BigInteger divR(ConvertibleToBi $x)
返回数字除法的余数。余数与被除数的符号相同。
- GMP 实现: gmp_div_r
- Bcmath 实现: bcmod
array(BigInteger, BigInteger) divQR(ConvertibleToBi $x)
除以数字并返回商和余数。返回一个数组,第一个元素是商,第二个是余数。
- GMP 实现: gmp_div_qr
- Bcmath 实现: div + divR
BigInteger mod(ConvertibleToBi $x)
“除法取余”操作。结果始终为非负数,除数的符号被忽略。
- GMP 实现: gmp_mod
- Bcmath 实现: 自定义(bcmod + bcadd)
BigInteger gcd(ConvertibleToBi $x)
计算最大公约数
- GMP 实现: gmp_gcd
- Bcmath 实现: 自定义(bccomp + bcdiv + bcsub + bcmul)
BigInteger|false modInverse(ConvertibleToBi $x)
通过取模进行逆运算,如果不存在逆运算则返回 false。
- GMP 实现: gmp_invert
- Bcmath 实现: 自定义(gcd)
BigInteger pow(ConvertibleToBi $x)
幂函数。
- GMP 实现: gmp_pow
- Bcmath 实现: bcpow
BigInteger powMod(ConvertibleToBi $x, ConvertibleToBi $n)
模幂函数。
- GMP 实现: gmp_powm
- Bcmath 实现: bcpowmod
BigInteger abs()
返回绝对值。
- GMP 实现: gmp_abs
- Bcmath 实现: 检查第一个字符
BigInteger neg()
取负数
- GMP 实现: gmp_neg
- Bcmath 实现: 检查第一个字符
BigInteger binaryAnd(ConvertibleToBi $x)
按位与。
- GMP 实现: gmp_and
- Bcmath 实现: 自定义(toBytes + php 字符串与)
BigInteger binaryOr(ConvertibleToBi $x)
按位或
- GMP 实现: gmp_or
- Bcmath 实现: 自定义(toBytes + php 字符串或)
BigInteger binaryXor(ConvertibleToBi $x)
按位异或
- GMP 实现: gmp_xor
- Bcmath 实现: 自定义(toBytes + php 字符串异或)
BigInteger setbit($index, $bitOn = true)
设置给定索引处的位
- GMP 实现: gmp_setbit
- Bcmath 实现: 自定义(toBits)
bool testbit($index)
测试给定索引处的位是否设置
- GMP 实现: gmp_testbit
- Bcmath 实现: 自定义(toBits)
int scan0($start)
查找 0,并返回找到的第一个位的索引
- GMP 实现: gmp_scan0
- Bcmath 实现: 自定义(toBits)
int scan1($start)
查找 1,并返回找到的第一个位的索引
- GMP 实现: gmp_scan1
- Bcmath 实现: 自定义(toBits)
int cmp(ConvertibleToBi $x)
比较数字,返回 <0, 0, >0
- GMP 实现: gmp_cmp
- Bcmath 实现: bccomp
bool equals(ConvertibleToBi $x)
检查数字是否相等
- GMP 实现: gmp_cmp
- Bcmath 实现: bccomp
int sign()
数字的符号,返回 -1, 0, 1
- GMP 实现: gmp_sign
- Bcmath 实现: 检查第一个字符
int toNumber()
转换为数字(仅用于小的 32/64 位数字)
- GMP 实现: gmp_intval
- Bcmath 实现: intval
string toDec()
转换为十进制字符串
- GMP 实现: gmp_strval
- Bcmath 实现: 仅值
string toHex()
转换为十六进制字符串
- GMP 实现: gmp_strval
- Bcmath 实现: toBytes + bin2hex
string toBytes
转换为二进制字符串
- GMP 实现: gmp_strval + hex2bin
- Bcmath 实现: 自定义(bcmod + bcdiv + bccomp)
string toBits()
转换为位字符串(0 和 1 字符)
- GMP 实现: gmp_strval
- Bcmath 实现: toBytes + decbin
string toString(int $base = 10)
使用给定的基数转换为字符串(支持的基数 2-62, 256)
- GMP 实现: 所有上述 toX 函数,以及非标准的 gmp_strval
- Bcmath 实现: 所有上述 toX 函数,以及非标准的 bcmod + bcdiv + bccomp