Как легко преобразовать в простые машиночитаемые шестнадцатеричные данные (без любого представления дополнений/смещений/символа) с xdd
или hexdump
?
Я устал от рытья некоторых строк специального формата (и узнавая, что оно внезапно начинает переносить строки после символов N или строк пропуска) или писать остротам Perl каждый раз.
Почему это не столь просто как base64
/base64 -d
?
Как легко преобразовать в простые машиночитаемые шестнадцатеричные данные
Вкратце.
$ 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 строка шестнадцатеричных цифр.