Hexadecimal To Decimal in Shell Script
Can someone help me to convert a hexadecimal number to decimal number in a shell script?
E.g., I want to convert the hexadecimal number bfca3000
to decimal using a shell script. I basically want the difference of two hexadecimal numbers.
My code is:
var3=`echo "ibase=16; $var1" | bc`
var4=`echo "ibase=16; $var2" | bc`
var5=$(($var4-$var3)) # [Line 48]
When executing, I get this error:
Line 48: -: syntax error: operand expected (error token is "-")
Solution 1:
To convert from hex to decimal, there are many ways to do it in the shell or with an external program:
With bash:
$ echo $((16#FF))
255
with bc:
$ echo "ibase=16; FF" | bc
255
with perl:
$ perl -le 'print hex("FF");'
255
with printf :
$ printf "%d\n" 0xFF
255
with python:
$ python -c 'print(int("FF", 16))'
255
with ruby:
$ ruby -e 'p "FF".to_i(16)'
255
with node.js:
$ nodejs <<< "console.log(parseInt('FF', 16))"
255
with rhino:
$ rhino<<EOF
print(parseInt('FF', 16))
EOF
...
255
with groovy:
$ groovy -e 'println Integer.parseInt("FF",16)'
255
Solution 2:
Dealing with a very lightweight embedded version of busybox on Linux means many of the traditional commands are not available (bc, printf, dc, perl, python)
echo $((0x2f))
47
hexNum=2f
echo $((0x${hexNum}))
47
Credit to Peter Leung for this solution.