Qual é uma boa ferramenta para converter ASCII em binário e binário em ASCII?
Eu esperava algo como:
$ echo --binary "This is a binary message"
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
Ou, mais realista:
$ echo "This is a binary message" | ascii2bin
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
E também o contrário:
$ echo "01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101" | bin2ascii
This is a binary message
PS: Estou usando o bash
PS2: Espero não ter entendido o binário errado
echo
.Respostas:
-e expression
avaliar a expressão dada comoperl
código-p
:sed
mode. A expressão é avaliada para cada linha de entrada, com o conteúdo da linha armazenada na$_
variável e impressa após a avaliação da expressão .-l
: ainda mais comosed
: em vez da linha completa, apenas o conteúdo da linha (ou seja, sem o delimitador de linha) está$_
(e uma nova linha é adicionada novamente na saída). Então,perl -lpe code
funciona comosed code
exceto que é umperl
código em oposição aosed
código.unpack "B*"
trabalha no$_
variável por padrão e extrai seu conteúdo como uma sequência de bits que caminha do bit mais alto do primeiro byte até o bit mais baixo do último byte.pack
faz o inverso deunpack
. Vejaperldoc -f pack
para detalhes.Com espaços:
(assume que a entrada está em blocos de 8 bits (preenchido com 0)).
Com
unpack "(B8)*"
, extraímos 8 bits de cada vez e juntamos as cadeias resultantes com espaços comjoin " "
.fonte
Você pode usar
xxd
para converter de ASCII e binário.Conversão de bases
Se você deseja fazer apenas conversões básicas entre Hex, Octal e Dec, geralmente uso a ferramenta básica de linha de comando da calculadora (
bc
) para fazer essas coisas. Observe quebc
sempre é muito exigente quanto à ordem correta das bases: você deve especificar a base (obase
) resultante primeiro e depois adicionar sua opçãoibase
.fonte
xxd
seria bom, exceto que mostra a primeira coluna irritante e a entrada de base no final da linha.awk
se livrar dele, mas ele não parece ter opções para desativar essa exibição.| awk '{print $2}'
. Existem outras ferramentas também.od
&hexdump
. Estou procurando outro método usando esses.-p
opção de obter uma saída 'puro'xxd -b
abordagem, no entanto, não se pode usarxxd
sozinho para converter o binário novamente em ASCII. De qualquer forma, temo que você precise usar algo comoprintf 'obase=16;ibase=2;%s\n' "$n" | bc | xxd -p -r
, com $ n contendo o número a ser convertido, como uma longa sequência de dígitos ou uma sequência de dígitos separados por ponto e vírgula. Se você pode garantir que $ n se encaixa no tipo aritmético de suas conchas, você pode se safar #printf '%x\n' $((2#$n)) | xxd -p -r
Usando bc e bash:
fonte
Solução Shell para converter binários em ascii:
fonte
sed
,,tr
ebc
são programas externos chamados no shell script.Em Python
fonte
Usando Python 3:
Salvo como "bin2ascii", por exemplo:
fonte
Codificando binário por base64
Decodificando base64
fonte