繁体   English   中英

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

[英]Moved from Windows 32 Bit to Linux 64 Bit, base_convert() issues

我在Windows 64位上使用32位php。 使用base_convert在我移至Centos 64位后,使用64位php返回不同的结果。 例如:

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

在Win64 PHP32-> 2147483647;

在CentOS64上,PHP64-> 4026992383;

有什么帮助吗?

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

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

找到了解决方案。

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

其中2147483647 = 32位中的PHP_INT_MAX

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM