繁体   English   中英

将十六进制转换为十进制php

[英]converting hexadecimal to decimal php

我必须使用PHP(不使用hexdec )将十六进制转换为十进制,但我的代码无法正确转换。

例如,当我使用函数HexToDez ("1F4"); ,答案应该是500,而不是1。

为什么不起作用?

编码

<?php    
function Replace ($i)
{
switch (strToLower ($i))
  {
  case "a" : return 10;
  case "b" : return 11;
  case "c" : return 12;
  case "d" : return 13;
  case "e" : return 14;
  case "f" : return 15;
  default  : return $i;
  }
}

function HexToDez($i) # 1F4
{
    $input=$i;
    $num=strlen ($input) ;
    $pos=0;
    $output="";
    $hochzahl="";
    while($pos<$num)
    {
        $mid = substr ($input, $pos, 1);
        $pos++;
        return $end=Replace ($mid);
    }   
    while ($end != 0){
        $zahl = $input%10;
        $output += $zahl*pow(16, $hochzahl);
        $end = $end/10;
        $hochzahl++;    
    }
    echo $output;
} 
?>

这是“经典”算法供您考虑,请查看注释:

function HexToDez($s) {
    $output = 0;
    for ($i=0; $i<strlen($s); $i++) {
        $c = $s[$i]; // you don't need substr to get 1 symbol from string
        if ( ($c >= '0') && ($c <= '9') )
            $output = $output*16 + ord($c) - ord('0'); // two things: 1. multiple by 16 2. convert digit character to integer
        elseif ( ($c >= 'A') && ($c <= 'F') ) // care about upper case
            $output = $output*16 + ord($s[$i]) - ord('A') + 10; // note that we're adding 10
        elseif ( ($c >= 'a') && ($c <= 'f') ) // care about lower case
            $output = $output*16 + ord($c) - ord('a') + 10;
    }

    return $output;
}

echo HexToDez("1F4"); // outputs 500

另外,您可以使用intval函数执行相同的操作,只需将您的数字转换为十六进制表示形式即可,例如0x###

function HexToDez($s) {
    return intval('0x'.$s, 16);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM