0

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

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

在 Win64 PHP32 -> 2147483647 上;

在 CentOS64 PHP64 -> 4026992383;

有什么帮助吗?

4

2 回答 2

1

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

另请注意,如果您想在 Windows 上正确执行操作,您可以像这样使用 GNU 多精度库:$result = gmp_strval( gmp_init('f00706ff', 16), 10 );尽管在 PHP 中使用您在 32 位平台上的大小的整数似乎是至少可以说是不愉快的。

于 2012-07-14T02:55:26.460 回答
0

找到了解决方案。

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

其中 2147483647 = PHP_INT_MAX in 32 BIT

于 2012-07-14T05:10:24.407 回答