Al menos para palabras de 16 bits, se puede canalizar a través de dd conv=swab
como en,
cat file.dat | dd conv=swab | od -t x2
¿Existe una utilidad como hexdump que maneje el endian no nativo?
Sí, la utilidad se llama Perl.
Bueno, en realidad Data::HexDumper, aunque podrías crear el tuyo propio.
number_format A string specifying how to format the data. It can be any of the following, which you will notice have the same meanings as they do to perl's pack function: C - unsigned char S - unsigned 16-bit, native endianness v or S< - unsigned 16-bit, little-endian n or S> - unsigned 16-bit, big-endian L - unsigned 32-bit, native endianness V or L< - unsigned 32-bit, little-endian N or L> - unsigned 32-bit, big-endian Q - unsigned 64-bit, native endianness Q< - unsigned 64-bit, little-endian Q> - unsigned 64-bit, big-endian
Como sugiere pixelbeat, podrías usar objcopy:
$ objcopy -I binary -O binary --reverse-bytes=num inputfile.bin outputfile.bin
donde num
es 2 para palabras de 16 bits, 4 para palabras de 32 bits y 8 para palabras de 64 bits.
Desafortunadamente, objcopy no tiene la opción de aceptar la entrada de stdin
o escribe la salida en stdout
, por lo que para usarlo como canalización, deberá escribir un script de contenedor que cree archivos temporales.
Esta respuesta se copia de https://stackoverflow.com/a/19288235/1979048 y de https://serverfault.com/a/329207/157443.