将十六进制转换为十进制php
我必须用PHP(不使用hexdec
)将十六进制转换为十进制来完成我的作业,但是我的代码无法正确转换。将十六进制转换为十进制php
例如,当我使用功能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);
}
所以我可以使用相同的算法为十六进制到八进制转换输出到八进制 –
@MemoTesare是的,你是对的 –
感谢您的帮助,你节省了我的一天 –
你是什么意思“似乎没有w扫“?什么_exactly_是你的问题? – arkascha
@arkascha当我使用函数HexToDez(“1F4”);答案应该是500而不是1 –
那是因为你用'return $ end = Replace($ mid);'返回它。你可能想看看'return'的功能。 – Federkun