Есть ли такая утилита, как hexdump, которая будет обрабатывать не родной порядок байтов?

Способность Hexdump читать двоичные данные и форматировать их соответствующим образом, чтобы, например, они могли быть переданы в awk, очень полезна, но мне регулярно нужно читать файлы, в которых двоичные данные имеют другой порядок байтов, чем тот, который присущ системе., В частности, мне нужно прочитать данные с прямым порядком байтов на машине с прямым порядком байтов. Моим идеальным решением было бы "hexdump" с переключателем для обращения к порядку байтов, но такого переключателя не существует.

Есть ли хорошие "следующие лучшие" решения этой проблемы?

5 ответов

Решение

Есть ли такая утилита, как hexdump, которая будет обрабатывать не родной порядок байтов?

Да, утилита называется Perl.

Ну, на самом деле Data:: HexDumper - хотя вы можете свернуть свой собственный.

number_format
Строка, определяющая, как форматировать данные. Это может быть любое из следующего,
что вы заметите, имеют те же значения, что и для функции пакета Perl:

C - беззнаковый символ
S        - беззнаковый 16-битный, нативный порядковый номер
v или S <- 16-разрядный без знака, с прямым порядком байтов
n или S> - 16-разрядный без знака, с прямым порядком байтов
L        - беззнаковая 32-битная, нативная последовательность
V или L <- беззнаковый 32-разрядный, с прямым порядком байтов
N или L> - 32-разрядный без знака, с прямым порядком байтов
Q        - беззнаковая 64-битная, нативная последовательность
Q <- беззнаковая 64-битная последовательность байтов
Q> - 64-разрядный без знака, с прямым порядком байтов

По крайней мере, для 16-битных слов можно пройти через dd conv=swab как в,

cat file.dat | dd conv=swab | od -t x2

Как показывает flammable, вы можете использовать objcopy:

$ objcopy -I binary -O binary --reverse-bytes=num inputfile.bin outputfile.bin

где num 2 для 16-битных слов, 4 для 32-битных слов и 8 для 64-битных слов.

К сожалению, objcopy не может принимать входные данные от stdin или записать вывод в stdoutпоэтому, чтобы использовать его в качестве канала, вам нужно написать скрипт-обертку, который создает временные файлы.

Этот ответ скопирован с https://stackoverflow.com/a/19288235/1979048 и с /questions/926085/nekotoryie-sajtyi-ne-rabotayut-posle-obnovleniya-do-ie9-mogu-li-ya-vernutsya-k-i/926102#926102.

Просто используйте od (8,23 или выше). Это часть Стандартной базы Linux, и, на мой взгляд, это лучше, чем hexdump на все. Это обеспечивает endian вариант,

‘--endian=order’
Reorder input bytes, to handle inputs with differing byte orders, or to provide consistent output independent of the endian convention of the current system. Swapping is performed according to the specified --type size and endian order, which can be ‘little’ or ‘big’.

Вы можете использовать это так,

od --endian big -x

Патч для добавления этого был принят в 2014 году

dd conv = swab <file.dat | шестнадцатеричного

Другие вопросы по тегам