Conversão de texto, dígitos binários - hexadecimais (ou decimais)

3

Eu tenho um enorme arquivo de texto com dígitos representando um valor de 8 bits em binário. Eu quero converter estes para hexadecimal (ou decimal, realmente não importa). Ou seja, eu tenho um arquivo de texto contendo, por exemplo,

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

(apenas 8 bits) e eu quero converter isso para, digamos,

0x0d
0x39
0x45
0x1d

Parece que isso pode ser feito com uma macro awk script / vim ou uma combinação de outras ferramentas.

    
por nos 02.09.2011 / 18:57

3 respostas

5

Aqui um trecho de script do bash para fazer isso

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

em que 2# significa base 2 e ${var// /} significa "remover todos os espaços"

    
por enzotib 02.09.2011 / 19:13
3

com o Perl:

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

com o awk:

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

Ou com bc:

(echo obase=16; ibase=2; sed 's/ //g' binary.txt) | bc
    
por Arcege 02.09.2011 / 19:35