O comando xxd, do UNIX e do GNU/Linux pode ser usado para brincar, gerando saídas em sequências de 0 e 1. Também é usado, por hackers para alterar ou corrigir arquivos de programas em formato binário.
O comando xxd gera uma saída em hexadecimal ou hex dump a partir de um dado arquivo.
Ele pode fazer o processo contrário, também — ou seja, converter um arquivo com conteúdo em hexadecimal para o modo binário original ou texto.
O procedimento de converter arquivos binários para hexadecimal é útil para transmitir dados naquele formato via email, de maneira segura, em formato ASCII.
Este procedimento também é útil para permitir que arquivos binários, possam ser editados em editores de texto comuns, sem sofrer danos.
Ao converter um arquivo binário para hexadecimal, é possível editá-lo com mais segurança — e depois converter de volta.
Normalmente, usam-se hex editors para isto. Mas, se você não tiver um por perto, pode usar este utilitário padrão no Unix/Linux.
Nos meus exemplos vou usar um trecho do poema ‘Não passou’, de Carlos Drummond de Andrade, dentro do meu arquivo ‘carlosdrummonddeandrade.txt’. Você pode usar qualquer outro arquivo texto, disponível no seu sistema:
cat carlosdrummonddeandrade.txt
Não passou (Carlos Drummond de Andrade) Hoje somos mais vivos do que nunca. Mentira, estarmos sós. Nada, que eu sinta, passa realmente. É tudo ilusão de ter passado
Para ver o texto representado em modo hexadecimal, use o xxd, sem opção alguma:
xxd carlosdrummonddeandrade.txt
0000000: 4ec3 a36f 2070 6173 736f 750a 0a28 4361 N..o passou..(Ca 0000010: 726c 6f73 2044 7275 6d6d 6f6e 6420 6465 rlos Drummond de 0000020: 2041 6e64 7261 6465 290a 0a48 6f6a 6520 Andrade)..Hoje 0000030: 736f 6d6f 7320 6d61 6973 2076 6976 6f73 somos mais vivos 0000040: 2064 6f20 7175 6520 6e75 6e63 612e 0a4d do que nunca..M 0000050: 656e 7469 7261 2c20 6573 7461 726d 6f73 entira, estarmos 0000060: 2073 c3b3 732e 0a4e 6164 612c 2071 7565 s..s..Nada, que 0000070: 2065 7520 7369 6e74 612c 2070 6173 7361 eu sinta, passa 0000080: 2072 6561 6c6d 656e 7465 2e0a c389 2074 realmente.... t 0000090: 7564 6f20 696c 7573 c3a3 6f20 6465 2074 udo ilus..o de t 00000a0: 6572 2070 6173 7361 646f 0a er passado.
Se preferir, você pode jogá-lo para dentro de outro arquivo. Para isto, informe o nome do arquivo de entrada seguido do nome do arquivo de saída:
xxd carlosdrummonddeandrade.txt carlosdrummonddeandrade.hex cat carlosdrummonddeandrade.hex
0000000: 4ec3 a36f 2070 6173 736f 750a 0a28 4361 N..o passou..(Ca 0000010: 726c 6f73 2044 7275 6d6d 6f6e 6420 6465 rlos Drummond de 0000020: 2041 6e64 7261 6465 290a 0a48 6f6a 6520 Andrade)..Hoje 0000030: 736f 6d6f 7320 6d61 6973 2076 6976 6f73 somos mais vivos 0000040: 2064 6f20 7175 6520 6e75 6e63 612e 0a4d do que nunca..M 0000050: 656e 7469 7261 2c20 6573 7461 726d 6f73 entira, estarmos 0000060: 2073 c3b3 732e 0a4e 6164 612c 2071 7565 s..s..Nada, que 0000070: 2065 7520 7369 6e74 612c 2070 6173 7361 eu sinta, passa 0000080: 2072 6561 6c6d 656e 7465 2e0a c389 2074 realmente.... t 0000090: 7564 6f20 696c 7573 c3a3 6f20 6465 2074 udo ilus..o de t 00000a0: 6572 2070 6173 7361 646f 0a er passado.
Como converter o arquivo para modo binário
Para ver a saída no modo binário, em vez de hexadecimal, use a opção ‘-b’.
Esta opção altera a formatação da saída para binary digits ou dígitos binários — ele reescreve o conteúdo do texto em octetos de zeros e uns.
Veja um exemplo:
xxd -b carlosdrummonddeandrade.txt
0000000: 01001110 11000011 10100011 01101111 00100000 01110000 N..o p 0000006: 01100001 01110011 01110011 01101111 01110101 00001010 assou. 000000c: 00001010 00101000 01000011 01100001 01110010 01101100 .(Carl 0000012: 01101111 01110011 00100000 01000100 01110010 01110101 os Dru 0000018: 01101101 01101101 01101111 01101110 01100100 00100000 mmond 000001e: 01100100 01100101 00100000 01000001 01101110 01100100 de And 0000024: 01110010 01100001 01100100 01100101 00101001 00001010 rade). 000002a: 00001010 01001000 01101111 01101010 01100101 00100000 .Hoje 0000030: 01110011 01101111 01101101 01101111 01110011 00100000 somos 0000036: 01101101 01100001 01101001 01110011 00100000 01110110 mais v 000003c: 01101001 01110110 01101111 01110011 00100000 01100100 ivos d 0000042: 01101111 00100000 01110001 01110101 01100101 00100000 o que 0000048: 01101110 01110101 01101110 01100011 01100001 00101110 nunca. 000004e: 00001010 01001101 01100101 01101110 01110100 01101001 .Menti 0000054: 01110010 01100001 00101100 00100000 01100101 01110011 ra, es 000005a: 01110100 01100001 01110010 01101101 01101111 01110011 tarmos 0000060: 00100000 01110011 11000011 10110011 01110011 00101110 s..s. 0000066: 00001010 01001110 01100001 01100100 01100001 00101100 .Nada, 000006c: 00100000 01110001 01110101 01100101 00100000 01100101 que e 0000072: 01110101 00100000 01110011 01101001 01101110 01110100 u sint 0000078: 01100001 00101100 00100000 01110000 01100001 01110011 a, pas 000007e: 01110011 01100001 00100000 01110010 01100101 01100001 sa rea 0000084: 01101100 01101101 01100101 01101110 01110100 01100101 lmente 000008a: 00101110 00001010 11000011 10001001 00100000 01110100 .... t 0000090: 01110101 01100100 01101111 00100000 01101001 01101100 udo il 0000096: 01110101 01110011 11000011 10100011 01101111 00100000 us..o 000009c: 01100100 01100101 00100000 01110100 01100101 01110010 de ter 00000a2: 00100000 01110000 01100001 01110011 01110011 01100001 passa 00000a8: 01100100 01101111 00001010 do.
Se você prefere uma solução mais limpa, use a seguinte expressão:
xxd -b -g0 carlosdrummonddeandrade.txt | cut -d' ' -f2
010011101100001110100011011011110010000001110000 011000010111001101110011011011110111010100001010 000010100010100001000011011000010111001001101100 011011110111001100100000010001000111001001110101 011011010110110101101111011011100110010000100000 011001000110010100100000010000010110111001100100 011100100110000101100100011001010010100100001010 000010100100100001101111011010100110010100100000 011100110110111101101101011011110111001100100000 011011010110000101101001011100110010000001110110 011010010111011001101111011100110010000001100100 011011110010000001110001011101010110010100100000 011011100111010101101110011000110110000100101110 000010100100110101100101011011100111010001101001 011100100110000100101100001000000110010101110011 011101000110000101110010011011010110111101110011 001000000111001111000011101100110111001100101110 000010100100111001100001011001000110000100101100 001000000111000101110101011001010010000001100101 011101010010000001110011011010010110111001110100 011000010010110000100000011100000110000101110011 011100110110000100100000011100100110010101100001 011011000110110101100101011011100111010001100101 001011100000101011000011100010010010000001110100 011101010110010001101111001000000110100101101100 011101010111001111000011101000110110111100100000 011001000110010100100000011101000110010101110010 001000000111000001100001011100110111001101100001 011001000110111100001010