Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert decimal to hexadecimal in UNIX shell script

Tags:

shell

unix

hex

People also ask

How do you convert a decimal number to hexadecimal?

Take decimal number as dividend. Divide this number by 16 (16 is base of hexadecimal so divisor here). Store the remainder in an array (it will be: 0 to 15 because of divisor 16, replace 10, 11, 12, 13, 14, 15 by A, B, C, D, E, F respectively). Repeat the above two steps until the number is greater than zero.

How do you convert hex to decimal in terminal?

Another option for converting hex to the decimal number is printf. '%d' format specifier is used in printf method to convert any number to decimal number.


Tried printf(1)?

printf "%x\n" 34
22

There are probably ways of doing that with builtin functions in all shells but it would be less portable. I've not checked the POSIX sh specs to see whether it has such capabilities.


echo "obase=16; 34" | bc

If you want to filter a whole file of integers, one per line:

( echo "obase=16" ; cat file_of_integers ) | bc

Hexidecimal to decimal:

$ echo $((0xfee10000))
4276158464

Decimal to hexadecimal:

$ printf '%x\n' 26
1a

bash-4.2$ printf '%x\n' 4294967295
ffffffff

bash-4.2$ printf -v hex '%x' 4294967295
bash-4.2$ echo $hex
ffffffff

Sorry my fault, try this...

#!/bin/bash
:

declare -r HEX_DIGITS="0123456789ABCDEF"

dec_value=$1
hex_value=""

until [ $dec_value == 0 ]; do

    rem_value=$((dec_value % 16))
    dec_value=$((dec_value / 16))

    hex_digit=${HEX_DIGITS:$rem_value:1}

    hex_value="${hex_digit}${hex_value}"

done

echo -e "${hex_value}"

Example:

$ ./dtoh 1024
400

Try:

printf "%X\n" ${MY_NUMBER}

In my case, I stumbled upon one issue with using printf solution:

$ printf "%x" 008 bash: printf: 008: invalid octal number

The easiest way was to use solution with bc, suggested in post higher:

$ bc <<< "obase=16; 008" 8