Php 数字字符串(任意大小)->;多重整数

Php 数字字符串(任意大小)->;多重整数,php,mysql,64-bit,32-bit,bigint,Php,Mysql,64 Bit,32 Bit,Bigint,我遇到了一个问题,因为我的数据库有BIGINT数据(64位整数),但我运行的PHP版本只有32位 所以,当我从表中取出值时,我最终得到一个数字字符串,表示以10为底的64位整数。理想情况下,我希望使用64位整数作为位掩码。因此,我需要使用两个32位整数(一个表示上半部分,一个表示下半部分)或基数2中的数字字符串 问题是我不能把它相乘,因为我的PHP只有32位。我卡住了吗?您可以使用MySQL将64位整数拆分为两个32位整数。因此,您可以选择: select (myBigIntField &

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

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

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

您可以使用MySQL将64位整数拆分为两个32位整数。因此,您可以选择:

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

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

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


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

您可以在这里选择:

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

  • 哦,真漂亮。为什么我没想到呢?自我提醒:起床后不要直接回答问题+詹姆斯,太棒了。谢谢不幸的是,我刚刚注册,所以我没有任何声誉投票支持你的答案,但它是完美的。