Добавление -r
опции (обратный режим) в xxd -b
действительности не работает должным образом, потому что xxd просто не поддерживает объединение этих двух флагов (игнорируется, -b
если заданы оба). Вместо этого вы должны сначала преобразовать биты в гекс. Например, вот так:
( echo 'obase=16;ibase=2'; sed -Ee 's/[01]/;\0/g' instructions.txt ) | bc | xxd -r -p > instructions.bin
Полное объяснение:
- Часть внутри скобок создает
bc
скрипт. Сначала он устанавливает входную базу в двоичное (2), а выходную базу - в шестнадцатеричное (16). После этогоsed
команда печатает содержимоеinstructions.txt
с точкой с запятой между каждой группой из 4 битов, что соответствует 1 шестнадцатеричной цифре. Результат передан вbc
. - Точка с запятой - это разделитель команд
bc
, поэтому все, что делает скрипт, это выводит каждое входное целое число обратно (после преобразования базы). - Вывод
bc
представляет собой последовательность шестнадцатеричных цифр, которую можно преобразовать в обычный файлxxd -r -p
.
Выход:
$ hexdump -Cv instructions.bin 00000000 00 00 00 13 02 d1 20 83 00 73 02 b3 00 73 04 33 |...... ..s...s.3| 00000010 00 73 64 b3 00 00 00 13 |.sd.....| 00000018 $ xxd -b -c4 instructions.bin 00000000: 00000000 00000000 00000000 00010011 .... 00000004: 00000010 11010001 00100000 10000011 .. . 00000008: 00000000 01110011 00000010 10110011 .s.. 0000000c: 00000000 01110011 00000100 00110011 .s.3 00000010: 00000000 01110011 01100100 10110011 .sd. 00000014: 00000000 00000000 00000000 00010011 ....