任意长度的16进制转10进制

发布时间 2023-10-31 08:53:09作者: 雨泣的世界
<?php
/**
 * 任意长度的16进制转10进制
 * @param string $hex_str
 * @return string
 */
function hexToDec($hex_str)
{
    $hex_str = trim($hex_str);
    $bin_str = "";
    for ($i = 0; isset($hex_str[$i]); $i++) {
        $bin = decbin(hexdec($hex_str[$i]));
        if ($i) {
            $bin_str .= sprintf("%04d", $bin);
        } else {
            $bin_str .= $bin;
        }
    }
    $num = array(0);
    for ($i = 0; isset($bin_str[$i]); $i++) {
        $plus = 0;
        for ($j = 0; isset($num[$j]); $j++) {
            $num[$j] = ($num[$j] << 1) + $plus;
            if ($num[$j] > 9) {
                $num[$j] -= 10;
                $plus = 1;
            } else {
                $plus = 0;
            }
        }
        if ($plus) {
            $num[] = 1;
        }
        if ($bin_str[$i] === '1')  {
            $plus = 1;
            for ($j = 0; isset($num[$j]); $j++) {
                $num[$j] += $plus;
                if ($num[$j] > 9) {
                    $num[$j] -= 10;
                    $plus = 1;
                } else {
                    $plus = 0;
                    break;
                }
            }
            if ($plus) {
                $num[] = 1;
            }
        }
    }
    return implode("",array_reverse($num));
}