【发布时间】: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。
这是可以理解的,但我仍然询问是否有其他方法解决这个问题。
【问题讨论】:
-
PHP_INT_MAX是一个常量,它定义了你的环境的最大整数,这不是你可以改变的,它是一个硬限制。 -
问题:您要解决的问题是什么?你说“存储大量数字的好压缩方法”
-
php.net/manual/en/function.dechex.php#21086 我发现这条评论来自“joost at”
dec2hex( '51501851833710653376097681408' )