从Windows 32位移动到Linux 64位,base_convert()问题
问题描述:
我正在使用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;
任何帮助?
答
找到解决方案。
<?php
$input = 'f00706ff';
$result = (int)base_convert($input,16,10);
if($result > 2147483647) $result = 2147483647;
echo $result;
?>
哪里2147483647 = PHP_INT_MAX在32位
答
您的Windows值错误,因为您的十六进制值超出了32位整数的范围(2147483647是以有符号整数为基数的最大值),并且您正在运行PHP的32位版本。 Linux的结果是正确的:)
另请注意,如果您想在Windows上正确执行操作,可以使用GNU Multiple Precision库,如下所示:$result = gmp_strval(gmp_init('f00706ff', 16), 10);
尽管可以使用大小不等的整数在PHP中的32位平台似乎至少可以说是不可思议的。
有没有一种办法可以让我的Linux表现得像现在的Windows? – Sahil 2012-07-14 03:14:20
不是运行32位版本的PHP。 (这不会很好。) – duskwuff 2012-07-14 04:06:26
检查我的解决方案。有用。 :) – Sahil 2012-07-14 09:22:13