BCMath 用于将十六进制转换为 Dec 的代码 - 问题 - 代码中的错误



我在尝试将十六进制值转换为十进制值的代码时遇到了一些问题。无论它是小整数还是大整数,有时,该函数都会向我返回转换为 Dec 的十六进制,尾随 8 个 ceros。例如:它应返回 72500 并返回 72500.00000000它是随机的,我认为代码"是正确的"。

好一个:

stdClass Object
(
    [BlockHeight] => 7503088
    [BlockHeightHash] => 0x58daab46cb25e887985d8d22d735147a5d92a226316223de04dc7b0ae265f7a7
)

错误的一个:

stdClass Object
(
    [BlockHeight] => 7503088.0000000000
    [BlockHeightHash] => 0x58daab46cb25e887985d8d22d735147a5d92a226316223de04dc7b0ae265f7a7
)

程序

public static function HexDec(string $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 (string)$dec;
    return $dec;
    //return sprintf('%.0F',$dec);
}
简单的方法 将十六进制字符串

转换为 32 位版本的 php 的十进制字符串

$test = '0x7000005a00000ea5';
$rrrrr = gmp_strval($test);
var_dump($test, $rrrrr);

会回来

字符串"0x7000005a00000ea5"(长度 = 18(
字符串"8070450918794989221"(长度 = 19(

最新更新