Разница в формате hexdump и xxd

17980
tanon

Я искал, как сделать обратную hexdump и нашел упомянутое xxd. Тем не менее, это не похоже на работу с:

xxd -r hexdumpfile > binaryfile 

Затем я сравнил разницу между выходами xxd infileи hexdump infileи обнаружил три различия:

  1. Выход xxd имеет двоеточие после адреса
  2. Выход xxd имеет позиции в обращенных данных (например, 5a42в выводе hexdump становится 425aв выводе xxd)
  3. Есть несколько дополнительных символов после каждой строки

У меня есть только шестнадцатеричная версия определенных файлов на сервере. Как я могу правильно вернуть двоичные данные, используя xxd?

8
Искал какой-то вариант в xxd, чтобы взять в формате hexdump, но на данный момент удалось сделать это с помощью некоторых простых операций sed tanon 12 лет назад 0
На самом деле я не проверял точно, что вы спрашиваете, но попробуйте xxd -p и -b, -p - это просто -b, это двоичный файл, а также ваш -r. Что касается порядка следования байтов, то это относится к порядку байтов с прямым и младшим порядком байтов, и, возможно, xxd не может изменить это ... но это связано с тем, как байты хранятся в файле. Как, если у вас есть текстовый файл в блокноте Вы можете сохранить его как Unicode 16-битный с прямым порядком байтов, или с прямым порядком байтов или UTF-8 или что-то еще, и вы увидите отличие от xxd. Команда od может отображать это по-другому. barlop 12 лет назад 0
Для дальнейшего использования hexdump позволяет вам выбрать порядок байтов, используемый в его выводе, что может упростить это. (Почему сейчас? Ваш вопрос оказался полезным для чего-то не связанного.) jpaugh 7 лет назад 0

2 ответа на вопрос

6
Tim

Я не знаю ни одной команды, которая бы выполняла преобразование, но ее легко разбить на несколько шагов:

  1. Убрать адреса из hexdumpвывода используяsed
  2. Преобразовать в двоичный файл, используя xxd
  3. Порядок преобразования (например, 5a42становится 425a)dd

Вот полная команда:

sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile 
0
Socowi

Вы можете сделать преобразование в одну sedкоманду. Достаточно добавить :после адреса и изменить порядковый номер (переключение ab12на 12ab).

sed -E 's/ /: /;s/ (..)(..)/ \2\1/g' dump | xxd -r