BCMath код для преобразования Hex в Dec - Проблемы - Ошибка в коде? - PullRequest
2 голосов
/ 19 апреля 2019

У меня есть проблема с кодом, пытающимся преобразовать шестнадцатеричные значения в десятичное. Независимо от того, является ли оно маленьким или большим целым, иногда функция возвращает мне Hex, преобразованный в 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);
}
...