我想在PHP中使用GNU MP的函数gmp_random()。 我需要设置我想要的位的确切值(例如,长度为64位的随机数)。
限制器参数乘以“每肢的位数”。我怎样才能获得这个价值? 这是否等同于CPU的位数或是否有任何PHP函数来获取值?
在原始库中,它由const mp_bits_per_limb表示。
答案 0 :(得分:2)
似乎没有简单的方法可以解决这个问题。
您可以假装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位。
答案 1 :(得分:0)
我写了一个补丁,现在修复它:https://bugs.php.net/bug.php?id=62375
补丁将在PHP中注册常量“GMP_LIMB_BITS”。