Existe um oneliner que converte um arquivo binário de little endian para big endian?

12

e vice-versa.

Estou executando um RedHat, se relevante.

    
por Will 29.10.2015 / 17:22

4 respostas

32

Você não pode fazer isso porque, para essa conversão, você precisa saber o significado do conteúdo binário.

Se, e. existe uma string dentro de um arquivo binário que não deve ser convertido e um inteiro de 4 bytes pode precisar de tratamento diferente de um inteiro de dois bytes.

Em outras palavras, para uma conversão de pedido de byte, você precisa de uma descrição do tipo de dados.

    
por 29.10.2015 / 17:33
31

Você pode byteswap com dd . Isso é suficiente? Se não, por favor atualize sua pergunta para dar um exemplo de um arquivo de entrada e o esperado outfile.

echo hello >infile
dd conv=swab <infile >outfile

hex infile
   0000 68 65 6c 6c 6f 0a                                 hello.
hex outfile
   0000 65 68 6c 6c 0a 6f                                 ehll.o
    
por 29.10.2015 / 17:28
2

Se você não se importa com o conteúdo dos arquivos e apenas deseja trocar os bytes, tente endconv . É apenas um wrapper em torno de funções de conversão de byte padrão, por isso suporta conversões de inteiros longos de 2, 4 e 8 bytes. Não é um liner, porque é um programa separado.

    
por 30.10.2015 / 05:00
0

Para alterar o arquivo endianess, assumindo o tamanho da palavra (32 bits), este 1 liner deve funcionar para você:

hexdump -v -e '1/4 "%08x"' -e '"\n"' input_file | xxd -r -p > output_file
    
por 27.08.2018 / 20:27

Tags