我想在 PHP 中使用 GNU MP 的函数gmp_random()。我需要设置我想要的位的确切值(例如一个 64 位长度的随机数)。
限制器参数乘以“每个肢体的位数”。我怎样才能得到这个值?这是否等同于 CPU 的位数,或者是否有任何 PHP 函数来获取该值?
在原始库中,它由 const mp_bits_per_limb表示。
我想在 PHP 中使用 GNU MP 的函数gmp_random()。我需要设置我想要的位的确切值(例如一个 64 位长度的随机数)。
限制器参数乘以“每个肢体的位数”。我怎样才能得到这个值?这是否等同于 CPU 的位数,或者是否有任何 PHP 函数来获取该值?
在原始库中,它由 const mp_bits_per_limb表示。
似乎没有简单的方法可以解决这个问题。
您可以假装 mp_bits_per_limb 等于 PHP_INT_SIZE*8 并使用它(适用于大多数架构,但不是所有架构)。由此产生的错误将是困难的,并且对于任何开发人员来说都是值得调试的。所以这可能是要走的路:)
或者通过知道 mp_bits_per_limb 不会小于 16 来解决它,所以你只需使用“number_of_bits_you_want/16”,得到一个包含太多位的结果,然后 gmp_and() 你的结果使用 0xFFFF、0xFFFFFFFF 或 0xFFFFFFFFFFFFFFFF 将其减少到16、32 或 64 位。
我写了一个补丁来修复它:https ://bugs.php.net/bug.php?id=62375
该补丁将在 PHP 中注册常量“GMP_LIMB_BITS”。