2012-07-14 162 views
0

我正在使用32位php的Windows 64位。使用base_convert我已经转移到64位的Centos 64位PHP返回不同的结果。例如:从Windows 32位移动到Linux 64位,base_convert()问题

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

On Win64 PHP32 - > 2147483647;

On CentOS64 PHP64 - > 4026992383;

任何帮助?

回答

0

找到解决方案。

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

哪里2147483647 = PHP_INT_MAX在32位

1

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

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

+0

有没有一种办法可以让我的Linux表现得像现在的Windows? – Sahil 2012-07-14 03:14:20

+0

不是运行32位版本的PHP。 (这不会很好。) – duskwuff 2012-07-14 04:06:26

+0

检查我的解决方案。有用。 :) – Sahil 2012-07-14 09:22:13