base_convert()函数的最大数量限制是多少?

时间:2012-06-22 09:09:16

标签: php

我想使用base_convert函数将60位二进制数据转换为Hex代码,如下所示。但结果不正确。以下代码的输出为4e08556312ffc00,但正确的输出为4E08556312FFBFF。 谁能告诉我为什么?功能是60位太大了?

echo "The beacon ID in Hexadecimal is".base_convert
         ("010011100000100001010101011000110001001011111111101111111111",2, 16);

感谢

4 个答案:

答案 0 :(得分:2)

在我对另一个问题here的回答中,我发布了一个基本转换函数的实现,没有这些限制。

答案 1 :(得分:0)

根据base_convertfloating numbers文档,base_convert将失去对大数字的精确度。

而不是,您可以使用bin2hex,这不受限制(此函数使用并返回字符串)

答案 2 :(得分:0)

我的测试显示超过43位的精度损失。

我使用默认设置在Win XP base + easyphp 3.1.81上工作。

我将这个base_convert用于家谱应用,43代的限制 - 有时 - 不够。

答案 3 :(得分:0)

它是更大的:

  1. PHP_INT_MAX
  2. 可以表示为float的连续整数集的最大值。
  3. 典型的PHP实现使用IEEE 754实现浮点数,其具有53位有效数,因此32位环境的典型限制是2⁵³(0x20000000000000),对于64位环境,限制是2⁶³-1(0x7fffffffffffffff)。

    如果你有PHP gmp扩展名(http://php.net/gmp),那就有一个简单的解决方案:

    $hexNumber = gmp_strval( gmp_init( $binNumber, 2 ), 16 ) ;
    

    如果你有bc扩展名(http://php.net/bc),我的(免费和开源)WeirdoCustomDigits module将使用任意基数和任意数字字符进行转换,但没有限制。

    如果您只是在基数2和基数16之间进行转换,就像您的示例一样,您可以在没有bc或gmp的情况下进行转换。请参阅WeirdoCustomDigits模块中的源代码,了解WeirdoCustomDigits :: binFromHex()和WeirdoCustomDigits :: hexFromBin()。