gpt4 book ai didi

php - PHP hexdec 的大十六进制值

转载 作者:可可西里 更新时间:2023-10-31 22:05:47 24 4
gpt4 key购买 nike

我有一些大的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com