Какой хороший инструмент для преобразования ASCII в двоичный файл и двоичный файл в ASCII?
Я надеялся на что-то вроде:
$ echo --binary "This is a binary message"
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
Или более реалистично:
$ echo "This is a binary message" | ascii2bin
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
А также наоборот:
$ echo "01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101" | bin2ascii
This is a binary message
PS: я использую Bash
PS2: я надеюсь, что я не получил неправильный двоичный файл
echo
.Ответы:
-e expression
оцените данное выражение какperl
код-p
:sed
Режим. Выражение вычисляется для каждой строки ввода, с содержанием строки , хранящейся в$_
переменной и напечатанной после оценки экспрессии .-l
: даже больше похожеsed
: вместо полной строки, только содержимое строки (то есть без разделителя строки) находится в$_
(и новая строка добавляется обратно на выходе). Такperl -lpe code
работает,sed code
за исключением того, что этоperl
код, а неsed
код.unpack "B*"
работает с$_
переменной по умолчанию и извлекает ее содержимое в виде строки битов, начиная с старшего бита первого байта до младшего бита последнего байта.pack
делает наоборотunpack
. Смотритеperldoc -f pack
подробности.С пробелами:
(предполагается, что входные данные в блоках по 8 бит (с добавлением 0)).
С помощью
unpack "(B8)*"
мы извлекаем 8 битов за раз и соединяем получающиеся строки с пробелами сjoin " "
.источник
Вы можете использовать
xxd
для преобразования из ASCII и двоичного файла.Конвертирующие базы
Если вы хотите просто выполнить базовые преобразования между шестнадцатеричным, октальным и декабрьским значениями, я обычно использую базовый инструмент командной строки калькулятора (
bc
) для таких целей. Обратите внимание, чтоbc
всегда очень требователен к правильному порядку баз:obase
сначала нужно указать результирующую базу ( ), а затем добавить свой выборibase
.источник
xxd
было бы неплохо, за исключением того, что показывает, что первый раздражающий столбец и базовый ввод в конце строки.awk
избавиться от него, но на нем нет переключателей для отключения этого дисплея.| awk '{print $2}'
, Есть и другие инструменты.od
&hexdump
. Я ищу другой метод, использующий их.-p
опцию для получения «чистого» выводаxxd -b
подход сам, однако, нельзя использоватьxxd
один, чтобы преобразовать двоичный файл обратно в ASCII. Кроме того, я боюсь, что вам придется использовать что-то вродеprintf 'obase=16;ibase=2;%s\n' "$n" | bc | xxd -p -r
$ n, содержащего число для преобразования, либо в виде длинной строки цифр, либо в виде строки цифр, разделенных точкой с запятой. Если вы можете гарантировать, что $ n вписывается в арифметический тип ваших оболочек, то вы можете сойти с рукprintf '%x\n' $((2#$n)) | xxd -p -r
Использование bc и bash:
источник
Оболочка решение для преобразования двоичного в ASCII:
источник
sed
,tr
иbc
являются внешними программами, вызываемыми в сценарии оболочки.В питоне
источник
Использование Python 3:
Сохранено как "bin2ascii", например:
источник
Кодирование двоичного файла с помощью base64
Декодирование base64
источник