php - PHP hexdec 的大十六进制值

标签 php hex

我有一些大的 HEX 值,我想将其显示为常规数字,我使用 hexdec() 转换为 float ,我在 PHP.net 上找到了一个将其转换为十进制的函数,但它似乎遇到了天花板,例如:

$h = 'D5CE3E462533364B';
$f = hexdec($h);
echo $f .' = '. Exp_to_dec($f);

输出:1.5406319846274E+19 = 15406319846274000000

calc.exe 的结果 = 15406319846273791563

是否有另一种方法可以转换大的十六进制值?

最佳答案

正如在 hexdec manual page 上所说:

The function can now convert values that are to big for the platforms integer type, it will return the value as float instead in that case.

如果你想获得某种大整数(不是 float ),你需要将它存储在一个字符串中。这可能使用 BC Math 是可能的功能。

例如,如果您查看 hexdec 手册页的注释,您会发现 this note

如果您对该函数进行一些调整,以避免引起注意,您将得到:

function bchexdec($hex)
{
    $dec = 0;
    $len = strlen($hex);
    for ($i = 1; $i <= $len; $i++) {
        $dec = bcadd($dec, bcmul(strval(hexdec($hex[$i - 1])), bcpow('16', strval($len - $i))));
    }
    return $dec;
}

(这个函数是从我链接到的笔记中复制过来的;我只做了一点改编)

并将其用于您的号码:

$h = 'D5CE3E462533364B';
$f = bchexdec($h);
var_dump($f);

输出将是:

string '15406319846273791563' (length=20)

所以,不是您拥有的那种大 float ;并且看起来符合您的期望:

Result from calc.exe = 15406319846273791563


希望这有帮助 ;-)
而且,是的,PHP 文档中的用户注释有时是真正的金矿 ;-)

关于php - PHP hexdec 的大十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1273484/

相关文章:

php - 通过 PHP 更新 MySQL 数据库的一行的频率是多少?

java - X509 十六进制公钥

swift - 将十六进制字符串转换为 Int

c - 打印某个变量的整个地址 block

php - 在自定义 SessionHandlerInterface 实现中确保 session 严格模式

php - 在 MySQL 中创建自己的函数时出现语法错误

php - 在 PHP 中解析 Javascript 文件以提取其中定义的数组的最佳方法

java - 更改像素的 alpha 值

c++ - 当使用 "%x"打印 numeric_limits<float>::infinity() 时会发生什么?

php - Hack typechecker 无法识别函数内的 'global' 关键字