【问题标题】:Moved from Windows 32 Bit to Linux 64 Bit, base_convert() issues从 Windows 32 位移至 Linux 64 位,base_convert() 问题
【发布时间】:2012-07-13 21:40:46
【问题描述】:

我正在使用 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;

有什么帮助吗?

【问题讨论】:

    标签: php centos lamp


    【解决方案1】:

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

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

    【讨论】:

    • 有没有办法让我的 linux 现在像 windows 一样工作?
    • 只能运行 32 位版本的 PHP。 (这不会很好用。)
    • 确保 url 在新服务器上不会出现 404。 :)
    【解决方案2】:

    找到了解决办法。

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

    其中 2147483647 = PHP_INT_MAX in 32 BIT

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 2010-10-31
      相关资源
      最近更新 更多