网站首页 > 文章专栏 > PHP BC高精确度进制转换
PHP BC高精确度进制转换
发布时间:2019-08-13 19:59:31 作者:飞星 浏览量:71

1、十进制转十六进制

/**
 * 将十进制长整型数转换成十六进制字符串
 * @param unknown $ary10
 * @return string
 */
private static function ary10To16($ary10)
{
    $result = [];$array = ['10' => 'a','11' => 'b','12' => 'c','13' => 'd','14' => 'e','15' => 'f','16' => 'g'];
    while ($ary10){
        $bcdiv = bcdiv($ary10, 16);
        // 求余数
        $bcsub = bcsub($ary10, (bcmul($bcdiv, 16)));
        // 余数转换值,如果大于9转字母
        $val = isset($array[$bcsub]) ? $array[$bcsub] : $bcsub;
        // 结果是用$val从后往前拼装的,追加到数据前面
        array_unshift($result, $val);
        // 用除的结果在循环里面继续计算
        $ary10 = $bcdiv;
    }
    return implode('', $result);
}

2、十六进制转十进制

/**
 * 将十六进制字符串转换成十进制长整型数
 * @param unknown $ary16
 */
private static function ary16To10($ary16)
{
    $result = 0;$ary16 = strtolower($ary16);
    $array = ['a' => '10','b' => '11','c' => '12','d' => '13','e' => '14','f' => '15','g' => '16'];
    for ($i = 0;$i < strlen($ary16);$i ++){
        
        $bit = $ary16[strlen($ary16) - ($i + 1)];
        
        $val = isset($array[$bit]) ? $array[$bit] : $bit;
        
        $pow = bcpow(16, $i);
        
        $result = bcadd($result, bcmul($val, $pow));
    }
    return $result;
}

来说两句吧
最新评论