×
Create a new article
Write your page title here:
We currently have 3,189 articles on s23. Type your article name above or create one of the articles listed here!



    s23
    3,189Articles

    Hex2dec: Difference between revisions

    Content added Content deleted
    imported>mutante
    mNo edit summary
    imported>mutante
    mNo edit summary
    Line 4: Line 4:
    # mutante (s23.org) 11/2006
    # mutante (s23.org) 11/2006


    if [ ! -n "$1" ]
    read -p "Give me a hex number " hex
    then
    read -p "Give me a hex number: " hex
    else
    hex=$1
    fi

    length=${#hex}
    length=${#hex}
    i=0
    i=0
    Line 12: Line 18:
    while [ $length -ge 0 ];
    while [ $length -ge 0 ];
    do
    do
    digit=${hex:$length:1}
    digit=${hex:$length:1}
    case "$digit" in

    A | a) ddigit=10;;
    case "$digit" in
    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;;
    *) echo "Bad input. Only 0-9 and A-F are allowed."; exit 1;;
    [0-9]) ddigit=$digit;;
    esac
    *) echo "Bad input. Only 0-9 and a-f are allowed."; exit 1;;
    factor=`echo "(16^$pos)" | bc`
    esac
    subresult=`echo "$factor*$ddigit" | bc`

    if [ ! -n "$1" ]; then echo "[$pos]: $digit => $ddigit * (16^$pos) = $ddigit * $factor = $subresult +"; fi
    factor=`echo "(16^$pos)" | bc`
    let result=$result+$subresult
    subresult=`echo "$factor*$ddigit" | bc`
    let pos++
    echo "[$pos]: $digit = $ddigit * (16^$pos) = $ddigit * $factor = $subresult"
    let length--
    let result=$result+$subresult
    let pos++
    let length--
    done
    done


    echo "Result: $hex (hex) is $result (dec)" | boxes
    if [ ! -n "$1" ]; then echo "Result: $hex (hex) is $result (dec)" | boxes; else echo "$hex (hex) = $result (dec)"; fi
    exit 0
    exit 0
    </highlightSyntax>
    </highlightSyntax>


    <pre>
    <pre>
    ./hex2dec.sh
    ./hex2dec.sh AFFE23
    AFFE23 (hex) = 11533859 (dec)


    ./hex2dec.sh
    Give me a hex number 523F
    Give me a hex number: F712
    [0]: F = 15 * (16^0) = 15 * 1 = 15
    [1]: 3 = 3 * (16^1) = 3 * 16 = 48
    [0]: 2 => 2 * (16^0) = 2 * 1 = 2 +
    [2]: 2 = 2 * (16^2) = 2 * 256 = 512
    [1]: 1 => 1 * (16^1) = 1 * 16 = 16 +
    [3]: 5 = 5 * (16^3) = 5 * 4096 = 20480
    [2]: 7 => 7 * (16^2) = 7 * 256 = 1792 +
    [3]: F => 15 * (16^3) = 15 * 4096 = 61440 +
    /*************************************/
    /*************************************/
    /* Result: 523F (hex) is 21055 (dec) */
    /* Result: F712 (hex) is 63250 (dec) */
    /*************************************/
    /*************************************/
    </pre>
    </pre>

    Revision as of 21:59, 12 November 2006

    <highlightSyntax>

    1. !/bin/bash
    2. hex to decimal number converter
    3. mutante (s23.org) 11/2006

    if [ ! -n "$1" ] then read -p "Give me a hex number: " hex else hex=$1 fi

    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` if [ ! -n "$1" ]; then echo "[$pos]: $digit => $ddigit * (16^$pos) = $ddigit * $factor = $subresult +"; fi let result=$result+$subresult let pos++ let length-- done

    if [ ! -n "$1" ]; then echo "Result: $hex (hex) is $result (dec)" | boxes; else echo "$hex (hex) = $result (dec)"; fi exit 0 </highlightSyntax>

     ./hex2dec.sh AFFE23
    AFFE23 (hex) = 11533859 (dec)
    
     ./hex2dec.sh
    Give me a hex number: F712
    [0]: 2 => 2 * (16^0) = 2 * 1 = 2 +
    [1]: 1 => 1 * (16^1) = 1 * 16 = 16 +
    [2]: 7 => 7 * (16^2) = 7 * 256 = 1792 +
    [3]: F => 15 * (16^3) = 15 * 4096 = 61440 +
    /*************************************/
    /* Result: F712 (hex) is 63250 (dec) */
    /*************************************/
    
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.