从Windows 32位移到Linux 64位,base_convert()问题

时间:2012-07-14 02:52:38

标签: php centos lamp

我正在使用32位PHP的Windows 64 Bit工作。使用base_convert在我使用64位php移动到Centos 64位后,返回不同的结果。例如:

<?php
    $input = 'f00706ff';
    $result  = (int)base_convert($input,16,10);
    echo $result;
?>

在Win64 PHP32上 - &gt; 2147483647;

在CentOS64 PHP64上 - &gt; 4026992383;

任何帮助?

2 个答案:

答案 0 :(得分:1)

您的Windows值错误,因为您的十六进制值超出了32位整数的范围(2147483647是基数10中有符号整数的最大值)并且您运行的是PHP的32位版本。 Linux结果是正确的:)

另请注意,如果您想在Windows上正确执行操作,可以使用GNU Multiple Precision库,如下所示:$result = gmp_strval( gmp_init('f00706ff', 16), 10 );尽管使用的是32位平台上的整数在PHP中似乎至少可以说是不合适的。

答案 1 :(得分:0)

找到了解决方案。

<?php
    $input = 'f00706ff';
    $result  = (int)base_convert($input,16,10);
    if($result > 2147483647) $result = 2147483647;
    echo $result;
?>

其中2147483647 = 32位的PHP_INT_MAX