Eu estava resolvendo um desafio em que encontrei um arquivo de dados sem extensão de arquivo. O file
comando mostra que é um arquivo data file (application/octet-stream)
. O hd
comando mostra o PIB. na última linha. Portanto, se eu inverter esse arquivo, obterei o arquivo no formato .PNG , procurei em todos os lugares, mas não encontrei uma solução explicando como inverter o conteúdo de um arquivo binário.
Com
xxd
(devim
) etac
(de GNU coreutils, tambémtail -r
em alguns sistemas):In
zsh
(o único shell que pode lidar internamente com dados binários (a menos que você queira considerar a abordagem de codificação base64 do ksh93 )):LC_ALL=C
: caracteres são bytes$mapfile[file.gnp]
: conteúdo dofile.gnp
arquivos::
: divide a string em seus constituintes de byteOa
: reverseO
rder ona
rray subscript esse arrayCom Perl:
Teste de performance:
Resultado:
perl -0777 -F
é a mais lenta.xxd
é a mais lenta.Observação: o tempo de
diff
execução deve ser o mesmo para todas as soluções, pois a saída deve ser a mesma.Aqui está uma maneira de reverter um arquivo binário usando
ksh93
. Deixei o código "solto" para facilitar o entendimento.Eu tentei o seguinte:
A ideia é forçar 'tac' usando qualquer caractere como separador. Eu tentei isso em um arquivo binário e parecia funcionar, mas qualquer confirmação seria apreciada.
A principal vantagem é que ele não carrega o arquivo na memória.