【问题标题】:Numeric String (arbitrary size) -> Multiple Integers数字字符串(任意大小)-> 多个整数
【发布时间】:2010-12-07 06:23:07
【问题描述】:

我遇到了问题,因为我的数据库有 BIGINT 数据(64 位整数),但我运行的 PHP 版本只有 32 位。

因此,当我从表中提取值时,我最终得到一个表示以 10 为底的 64 位整数的数字字符串。理想情况下,我想做的是使用 64 位整数作为位掩码。所以我需要选择两个 32 位整数(一个代表上半部分,一个代表下半部分)或以 2 为底的数字字符串。

问题是我不能把它相乘,因为我的 PHP 只有 32 位。我被卡住了吗?

【问题讨论】:

    标签: php mysql 64-bit 32-bit bigint


    【解决方案1】:

    您可以使用 MySQL 的bit shift operators 将 64 位整数拆分为两个 32 位整数。所以,你可以选择:

    select (myBigIntField & 0xffffffff) as lowerHalf,
           (myBigIntField >> 32) as upperHalf
    

    【讨论】:

    • 哦,太美了。为什么我没有想到呢?提醒自己:起床后不要直接回答问题。 +1
    • 詹姆斯,太棒了。谢谢!不幸的是,我刚刚注册,所以我没有任何声誉可以投票给你的答案,但它是完美的。
    【解决方案2】:

    要处理任意大小的整数,在 PHP 中有两个选项:GMPBC Math 方法。

    相信 GMP 通过使用一些自定义资源更有效,而 BC 直接使用字符串。

    如果您一次不会处理太多(数千个或更多)数字,您可以直接使用 BC。

    【讨论】:

      【解决方案3】:

      你有几个选择:

      1. 如果您的 PHP 安装中包含 BCMathGMP,请使用它们。两者都应该提供任意长度的整数。
      2. 要求数据库将整数转换为 64 字符长的位字符串
      3. 自己编写一个 bignum 实现(更多工作:-))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 2021-06-21
        • 2016-09-17
        • 1970-01-01
        • 2021-03-17
        • 2016-10-18
        相关资源
        最近更新 更多