3

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

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

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

4

3 回答 3

6

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

select (myBigIntField & 0xffffffff) as lowerHalf,
       (myBigIntField >> 32) as upperHalf
于 2009-10-16T05:18:59.960 回答
1

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

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

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

于 2009-10-16T05:19:56.383 回答
1

你有几个选择:

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