bashbinaryhexbc

Hex to Binary conversion in bash


I'm trying to convert a series of bytes from hex to bin using bash. but I keep getting (seemingly random) "(standard_in) 1: syntax error" replies 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 to bin, which works perfectly 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 pretty much the same (unless I'm missing something really hard.)


Solution

  • BC is a bit sensitive to case for hex values, change 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