【问题标题】:Increase the maximum length and size of a hexadecimal integer in PHP增加PHP中十六进制整数的最大长度和大小
【发布时间】:2018-03-13 09:45:27
【问题描述】:

我正在使用函数dechex 将大十进制转换为十六进制,但我发现使用此函数不适用于过大的数字。我正在使用这个过程,因为它似乎是存储大量数字的好压缩方法。

我要修改的数字是:

51501851833710653376097681408

我收到了输出:

7fffffff // which is 2147483647, the max int

我已尝试更改 INI:

ini_set('PHP_INT_MAX', 0);

这并没有改变十六进制的长度。

我希望能够使十六进制最大长度为 16-32 个字符。如果不编写自定义的十六进制算法,这可能吗?

从函数dechex 的手册中指出:

可以转换的最大数是 PHP_INT_MAX * 2 + 1(或 -1):在 32 位平台上,这将是十进制的 4294967295,这导致 dechex() 返回 ffffffff。

这是可以理解的,但我仍然询问是否有其他方法解决这个问题。

【问题讨论】:

  • 这只是一个想法,所以我会评论它而不是发布答案。函数pack() 可能是这里的解决方案。然后您可以使用bin2hex() 将其转换为十六进制数字字符串。
  • PHP_INT_MAX 是一个常量,它定义了你的环境的最大整数,这不是你可以改变的,它是一个硬限制。
  • 问题:您要解决的问题是什么?你说“存储大量数字的好压缩方法
  • php.net/manual/en/function.dechex.php#21086 我发现这条评论来自“joost at”dec2hex( '51501851833710653376097681408' )

标签: php algorithm hex


【解决方案1】:

int(和PHP_INT_MAX 常量)是platform-specific,对应于long signed int C 类型。

我认为你应该使用某种arbitrary precision base converter 库或GMP extension,PHP 没有内置任意精度算法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2010-12-26
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多