Hex to binary conversion in bash

I am trying to convert a sequence of bytes from hex to bin using bash. but I keep getting (seemingly random) "(standard_in) 1: syntax error" answers from the following code:

for j in c4 97 91 8c 85 87 c4 90 8c 8d 9a 83 81 do BIN=$(echo "obase=2; ibase=16; $j" | bc ) echo $BIN done 

I did a similar thing with dec bin, which works fine:

 for i in {0..120} do KEYBIN=$(echo "obase=2; ibase=10; $i" | bc) echo $KEYBIN done 

Does anyone have an idea why it works with decimal, but not with hex? In my opinion, the syntax is almost the same (unless I miss something really hard.)

+9
bash binary hex bc
source share
3 answers

BC is a little case sensitive for hexadecimal values, changes to uppercase and it should work

 for j in C4 97 91 8C 85 87 C4 90 8C 8D 9A 83 81 do BIN=$(echo "obase=2; ibase=16; $j" | bc ) echo $BIN done 

Output:

 11000100 10010111 10010001 10001100 10000101 10000111 11000100 10010000 10001100 10001101 10011010 10000011 10000001 
+16
source share

Here's the script I use:

 #!/bin/bash # SCRIPT: hex2binary.sh # USAGE: hex2binary.sh Hex_Number(s) # PURPOSE: Hex to Binary Conversion. Takes input as command line # arguments. ##################################################################### # Script Starts Here # ##################################################################### if [ $# -eq 0 ] then echo "Argument(s) not supplied " echo "Usage: hex2binary.sh hex_number(s)" else echo -e "\033[1mHEX \t\t BINARY\033[0m" while [ $# -ne 0 ] do DecNum=`printf "%d" $1` Binary= Number=$DecNum while [ $DecNum -ne 0 ] do Bit=$(expr $DecNum % 2) Binary=$Bit$Binary DecNum=$(expr $DecNum / 2) done echo -e "$Number \t\t $Binary" shift # Shifts command line arguments one step.Now $1 holds second argument unset Binary done fi 
+4
source share

Try it:

 for j in c4 97 91 8c 85 87 c4 90 8c 8d 9a 83 81 do BIN=$(echo "obase=2; ibase=16; ${j^^}" | bc ) echo $BIN done 
-one
source share

All Articles