Как преобразовать данные файла в простое шестнадцатеричное число?

Как легко преобразовать в простые машиночитаемые шестнадцатеричные данные (без любого представления дополнений/смещений/символа) с xdd или hexdump?

Я устал от рытья некоторых строк специального формата (и узнавая, что оно внезапно начинает переносить строки после символов N или строк пропуска) или писать остротам Perl каждый раз.

Почему это не столь просто как base64/base64 -d?

7
задан 16.06.2016, 20:33

0 ответов

hexdump -e '"%x"'
xxd -p | tr -d '\n'

Если Вы устаете от записи этот каждый раз, создаете псевдоним.

13
ответ дан 07.12.2019, 14:31

Как легко преобразовать в простые машиночитаемые шестнадцатеричные данные

Вкратце.

$ xxd -plain test.txt > test.hex
$ xxd -plain -revert test.hex test2.txt
$ diff test.txt test2.txt
$

Объяснение:

$ xxd -plain test.txt > test.hex

Это пишет шестнадцатеричное кодирование данных в test.txt в новый файл test.hex. -p или -plain опция заставляет xxd использовать "простой" шестнадцатеричный формат без пробелов между парами шестнадцатеричных цифр (т.е. никаких пробелов между значениями байта). Это преобразовывает "abc ABC" в "61626320414243". Без -p это преобразовало бы текст в ориентированный традиционный hexdump формат 16-разрядного слова, который возможно легче считать, но менее компактный и поэтому менее подходящий как формат передачи и немного тяжелее инвертировать.

$ xxd -plain -revert text.hex test2.txt

Это использует -r или -revert опция для обратной операции. -plain опция используется снова, чтобы указать, что входной шестнадцатеричный файл находится в простом формате.

Я делаю выходное имя файла отличающимся от исходного имени файла, таким образом, мы можем позже сравнить результаты с исходным файлом.

$ diff test.txt test2.txt
$ 

Различная команда ничего не производит - это означает, что нет никакого различия между исходным и воссозданным содержанием файла.


Я устал от рытья некоторых строк специального формата

Используйте псевдоним или объявите, что функции в Вашем .profile создают мнемонику, таким образом, Вы не должны помнить или вырыть о в страницах справочника.

или просто помните -plain и -revert.


Перенесенный вывод

Да, в выводе существуют символы новой строки. Вы хотите избежать этого. Можно использовать -c или -cols опция указать, сколько времени Вы хотите, чтобы выходные строки были, чтобы попытаться избежать обертывания строки вывода. -c 0 дает длину по умолчанию, и страница справочника предлагает 256, предел, но это, кажется, работает кроме того.

$ xxd -plain -cols 9999 test.txt > test.hex
$ wc test.txt test.hex
  121   880  4603 test.txt
    1     1  9207 test.hex

wc команда wordcount говорит нам, сколько строк, слов и символов находится в каждом файле.

Таким образом, 121 строка (880 слов, 4 603 байта) текста ASCII была закодирована как 1 строка шестнадцатеричных цифр.

5
ответ дан 07.12.2019, 14:31

Теги

Похожие вопросы