3

I have a huge text file with digits representing an 8 bit value in binary. I want to convert these to hexadecimal (or decimal, doesn't really matter). That is, I have a text file containing e.g.

0 0 0 0  1 1 0 1
0 0 1 1  1 0 0 1
0 1 0 0  0 1 0 1
1 0 0 0  1 1 0 1

(just 8 bits) and I'd want to convert this to, say,

0x0d
0x39
0x45
0x1d

It sounds like this could be done with an awk script/vim macro, or a combination of any other tools.

3 Answers 3

5

Here a snippet of bash scripting to do that

while read line; do
    n=$((2#${line// /}))
    printf '0x%02X\n' "$n"
done <input-file

where 2# means base 2 and ${var// /} means "remove all spaces"

3

With Perl:

perl -ne 's/ *//g; printf("0x%02x\n", eval("0b$_"))' somefile.txt
3

With awk:

awk '{d=0; for (i=1; i<=NF; i++) {d=(d*2)+$i} printf "0x%02x\n", d}' binary.txt

Or with bc:

(echo obase=16; ibase=2; sed 's/ //g' binary.txt) | bc

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .