hexdump -e '"% x"'
xxd -p | tr -d '\ n'
Если вам надоело писать это каждый раз, создайте псевдоним .
Как легко преобразовать в / из простых машиночитаемых шестнадцатеричных данных (без каких-либо дополнений / смещений / представления символов) с помощью xdd
или hexdump
?
Я устал копать некоторые строки специального формата (и обнаруживать, что он внезапно начинает перенос строк после N символов или пропуска строк) или писать Perl-однострочники каждый раз.
Почему это не так просто, как base64
/ base64 -d
?
hexdump -e '"% x"'
xxd -p | tr -d '\ n'
Если вам надоело писать это каждый раз, создайте псевдоним .
Как легко конвертировать в / из простых машиночитаемых шестнадцатеричных данных
Вкратце.
$ 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
or -plain
заставляет xxd использовать «простой» шестнадцатеричный формат без пробелов между парами шестнадцатеричных цифр (т.е. без пробелов между байтовыми значениями). Это преобразует «ABC ABC» в «61626320414243». Без -p
него он преобразовал бы текст в 16-битный ориентированный на слова традиционный формат hexdump, который, возможно, легче читать, но менее компактен и, следовательно, менее пригоден в качестве формата передачи и немного сложнее повернуть назад.
$ xxd -plain -revert text.hex test2.txt
Используется опция -r
или -revert
для обратной операции. -plain
Опция используется снова, чтобы указать, что входной шестнадцатеричный файл в простом формате.
Я делаю выходное имя файла отличным от исходного имени файла, чтобы позже мы могли сравнить результаты с исходным файлом.
$ diff test.txt test2.txt $
Команда diff ничего не выводит - это означает, что нет разницы между исходным и восстановленным содержимым файла.
Я устал копать какие-то строки специального формата
Используйте псевдоним или объявите функции в вашем .profile для создания мнемоники, чтобы вам не приходилось запоминать или копаться в man-страницах.
или просто запомнить -plain
и -revert
.
Завернутый вывод
Да, в выводе есть символы новой строки. Вы хотите избежать этого. Вы можете использовать опцию -c
или, -cols
чтобы указать, как долго вы хотите, чтобы выходные строки пытались избежать переноса строк в выходных данных. -c 0
задает длину по умолчанию, а man-страница предполагает, что 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 слов, 4603 байта) текста ASCII была закодирована как 1 строка шестнадцатеричных цифр.
Вот версия, использующая od
утилиту (часть coreutils
пакета):
od -An < input | tr -dc '[:alnum:]'