De qualquer forma, para qualquer formato de arquivo, tenho certeza de que você poderia escrever uma única linha para converter sua endianness usando Perl e empacotar / descompactar . Para alguns formatos, será apenas uma linha mais longa do que para outros. ;-)
Ilmari Karonen
Respostas:
34
Você não pode fazer isso porque, para tal conversão, precisa conhecer o significado do conteúdo binário.
Se, por exemplo, houver uma string dentro de um arquivo binário, ela não deve ser convertida e um número inteiro de 4 bytes pode precisar de tratamento diferente do número inteiro de dois bytes.
Em outras palavras, para uma conversão de ordem de bytes, você precisa de uma descrição do tipo de dados.
Eu era apenas para dizer isso. não é tão simples como apenas trocar cada par de bytes. por exemplo, um número inteiro de 4 bytes 01 02 03 04 no bigendian pode ter esta aparência no little endian 04 02 03 01 NÃO 02 01 04 03 cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html
Rob
1
Acordado, endianness não faz sentido em um cru, fluxo typeless byte ... isso deve ser a resposta aceite se OP não editar a sua pergunta
Thomas
[citation needed] - AFAIK, a menos que um aplicativo preserve explicitamente uma ordem de bytes e não outras, é comum que bytes ou palavras sejam ordenados de forma consistente.
Pausado até novo aviso.
1
@DennisWilliamson: Uma string UTF-8 ou ASCII não possui endianness. UTF-8 especifica a ordem dos bytes, enquanto o ASCII é de 7 bits e não possui tokens de vários bytes. Uma string UTF-16 possui endianness e pode ou não ter uma lista técnica para marcar esse endianness. Um binário Unix destinado a interagir com Windows ou Java pode ter os dois tipos de cadeia, o que significa que você deve distingui-los ao converter.
30715 Kevin
Eu vim aqui procurando um programa em que você dê a descrição dos dados e os dados e os converta. Até o momento, não encontrei esse programa, mas isso não significa que ele não possa ser feito.
Levi Morrison
32
Você pode byteswap com dd. Isso é suficiente? Caso contrário, atualize sua pergunta para dar um exemplo de um arquivo de entrada e o arquivo esperado.
Se você não se importa com o conteúdo do arquivo e apenas deseja trocar bytes, tente endconv . É apenas um invólucro das funções de conversão de bytes padrão, portanto, suporta a conversão por números inteiros de 2, 4 e 8 bytes. Não é um liner porque é um programa separado.
Respostas:
Você não pode fazer isso porque, para tal conversão, precisa conhecer o significado do conteúdo binário.
Se, por exemplo, houver uma string dentro de um arquivo binário, ela não deve ser convertida e um número inteiro de 4 bytes pode precisar de tratamento diferente do número inteiro de dois bytes.
Em outras palavras, para uma conversão de ordem de bytes, você precisa de uma descrição do tipo de dados.
fonte
Você pode byteswap com
dd
. Isso é suficiente? Caso contrário, atualize sua pergunta para dar um exemplo de um arquivo de entrada e o arquivo esperado.fonte
Se você não se importa com o conteúdo do arquivo e apenas deseja trocar bytes, tente endconv . É apenas um invólucro das funções de conversão de bytes padrão, portanto, suporta a conversão por números inteiros de 2, 4 e 8 bytes. Não é um liner porque é um programa separado.
fonte
Para alterar a capacidade de endereçamento de arquivos, assumindo o tamanho da palavra (32 bits), este liner 1 deve funcionar para você:
fonte