Content added Content deleted
imported>mutante mNo edit summary |
imported>mutante mNo edit summary |
||
Line 12: | Line 12: | ||
while [ $length -ge 0 ]; |
while [ $length -ge 0 ]; |
||
do |
do |
||
digit=${hex:$length:1} |
digit=${hex:$length:1} |
||
case "$digit" in |
case "$digit" in |
||
A | a) ddigit=10;; |
A | a) ddigit=10;; |
||
B | b) ddigit=11;; |
B | b) ddigit=11;; |
||
C | c) ddigit=12;; |
C | c) ddigit=12;; |
||
D | d) ddigit=13;; |
D | d) ddigit=13;; |
||
E | e) ddigit=14;; |
E | e) ddigit=14;; |
||
F | f) ddigit=15;; |
F | f) ddigit=15;; |
||
[0-9]) ddigit=$digit;; |
[0-9]) ddigit=$digit;; |
||
*) echo "Bad input. Only 0-9 and a-f are allowed."; exit 1;; |
*) echo "Bad input. Only 0-9 and a-f are allowed."; exit 1;; |
||
esac |
esac |
||
factor=`echo "(16^$pos)" | bc` |
|||
factor=`echo "(16^$pos)" | bc` |
|||
subresult=`echo "$factor*$ddigit" | bc` |
|||
echo "[$pos]: $digit = $ddigit * (16^$pos) = $ddigit * $factor = $subresult" |
echo "[$pos]: $digit = $ddigit * (16^$pos) = $ddigit * $factor = $subresult" |
||
let result=$result+$subresult |
let result=$result+$subresult |
||
let pos++ |
|||
let |
let pos++ |
||
let length-- |
|||
done |
done |
||
Revision as of 21:32, 12 November 2006
<highlightSyntax>
- !/bin/bash
- hex to decimal number converter
- mutante (s23.org) 11/2006
read -p "Give me a hex number " hex length=${#hex} i=0 result=0 let length-- pos=0 while [ $length -ge 0 ]; do
digit=${hex:$length:1}
case "$digit" in A | a) ddigit=10;; B | b) ddigit=11;; C | c) ddigit=12;; D | d) ddigit=13;; E | e) ddigit=14;; F | f) ddigit=15;; [0-9]) ddigit=$digit;; *) echo "Bad input. Only 0-9 and a-f are allowed."; exit 1;; esac
factor=`echo "(16^$pos)" | bc` subresult=`echo "$factor*$ddigit" | bc` echo "[$pos]: $digit = $ddigit * (16^$pos) = $ddigit * $factor = $subresult" let result=$result+$subresult let pos++ let length--
done
echo "Result: $hex (hex) is $result (dec)" | boxes exit 0 </highlightSyntax>
./hex2dec.sh Give me a hex number 523F [0]: F = 15 * (16^0) = 15 * 1 = 15 [1]: 3 = 3 * (16^1) = 3 * 16 = 48 [2]: 2 = 2 * (16^2) = 2 * 256 = 512 [3]: 5 = 5 * (16^3) = 5 * 4096 = 20480 /*************************************/ /* Result: 523F (hex) is 21055 (dec) */ /*************************************/