2017-04-20 28 views
0

私の宿題ではPHPを使って16進数を10進数に変換する必要がありますが(hexdecは使用しません)、コードは正しく変換されません。例えば16進数から10進数に変換

私は機能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; 
} 
?> 
+1

「どのように見えませんか? ork "?あなたの質問は何ですか? – arkascha

+0

@arkascha関数HexToDez( "1F4")を使用すると、あなたは 'return $ end = Replace($ mid);'で答を返すので、回答は500ではなく1 –

+1

でなければなりません。あなたは 'return'が何をしているのか見たいかもしれません。 – Federkun

答えて

0

は、コメントをチェックし、あなたが考慮するための「古典的」なアルゴリズムです:

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機能を使用することができます数字を16進数表記にします。0x###

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

私は8進数に出力を変換することにより、16進数から8進数に同じアルゴリズムを使用することができます –

+0

@MemoTesareはい、あなたは正しくて –

+0

私の日を助けてくれてありがとう –

関連する問題