2016-03-12 154 views
-1

我是PHP初學者,我想創建一個將十進制數轉換爲十六進制數的程序。 (實際上我想將我的顏色十進制值轉換爲十六進制值)但是,它無法正常工作。例如,當我按下按鈕轉換這個參數:紅= 98藍= 123 =綠色54 它會產生這樣的結果:PHP計算不正確

Red : Green : Blue : B

我不明白自己做錯了什麼是。

這是我的源代碼:

<html> 
<head> 
    <title>Convert Decimal Number to Hexadecimal Number</title> 
<form method="POST" action="index.php" > 
    Red : <input type="text" name="red" /> <br /> 
    Green: <input name="green" type="text" /> <br /> 
    Blue : <input name="blue" type="text" /> <br /> 
    <input type="submit" value="Calculate!" /> <br /> 
</form> 
</head> 
<body> 
    <?php 
    $completely=""; 
    if ($_POST['red']==""){ 
     exit(); 
    } 
    function subcalculate($valuetoconvert){ 
     if ($valuetoconvert>9){ 
      switch ($valuetoconvert){ 
       case 10: 
        $valuetoconvert=A; 
        break; 
       case 11: 
        $valuetoconvert=B; 
        break; 
       case 12: 
        $valuetoconvert=C; 
        break; 
       case 13: 
        $valuetoconvert=D; 
        break; 
       case 14: 
        $valuetoconvert=E; 
        break; 
       case 15: 
        $valuetoconvert=F; 
        break; 
      } 
      return $valuetoconvert; 
     } 
    } 
    function dectohexcal($color,$colorname){ 
     $bir=subcalculate(($color-($color%16))/16); 
     $iki=subcalculate($color%16); 
     if ($bir==0){ 
      echo "$colorname : $iki <br />"; 
      $completely=$completely+$iki; 
     }else{ 
      echo "$colorname : $bir$iki <br />"; 
      $completely=$completely+$bir+$iki; 
     } 

    } 
    dectohexcal($_POST['red'], "Red"); 
    dectohexcal($_POST['green'], "Green"); 
    dectohexcal($_POST['blue'], "Blue"); 
    echo "<br />$completely"; 
    ?> 

</body> 

+3

爲什麼要重新發明輪子?有一個函數可以將小數轉換爲十六進制:http://php.net/manual/en/function.dechex.php – Qirel

+0

而你的問題似乎是你只在'subcalculate()'內返回'$ valuetoconvert',是> 9,所以它不返回任何<= 9的東西 – Qirel

回答

1

你只需要使用 dechex()函數 它可與PHP4 +。

<?php 
echo "Red: ".dechex($_POST['red']) . "\n"; 
echo "Green: ". dechex($_POST['green'])."\n"; 
echo "Blue: ".dechex($_POST['blue']); 
?> 

這應該讓您的工作完成而不需要重新發明輪子。