it-swarm.com.ru

Как преобразовать текстовый файл в двоичный файл с помощью команд Linux

У меня есть шестнадцатеричный код двоичного файла в текстовом (строковом) формате. Как мне преобразовать его в двоичный файл, используя команды Linux, такие как cat и echo?

Я знаю команду следующую команду с создать двоичный файл test.bin. Но что, если этот шестнадцатеричный код находится в другом файле .txt? Как мне «перебрать» содержимое текстового файла в «echo» и сгенерировать двоичный файл?

# echo -e "\x00\x001" > test.bin

9
aMa

используйте xxd -r. он возвращает hexdump в свое двоичное представление.

источник и источник

Edit: параметр -p также очень полезен. Он принимает "простые" шестнадцатеричные значения, но игнорирует пробелы и изменения строк.

Итак, если у вас есть простой текстовый дамп, например:

echo "0000 4865 6c6c 6f20 776f 726c 6421 0000" > text_dump

Вы можете преобразовать его в двоичный файл с помощью:

xxd -r -p text_dump > binary_dump

И затем получить полезный вывод с чем-то вроде:

xxd binary_dump
21
1010

Если у вас длинный текст или текст в файле, вы также можете использовать инструмент binmake , который позволяет вам описывать в текстовом формате некоторые двоичные данные и генерировать двоичный файл (или выводить в stdout). Позволяет изменять порядковый номер и числовые форматы и принимает комментарии.

Формат по умолчанию - шестнадцатеричный, но не ограничивается этим.

Сначала получите и скомпилируйте binmake:

$ git clone https://github.com/dadadel/binmake
$ cd binmake
$ make

Вы можете передать это, используя stdin и stdout:

$ echo '32 decimal 32 61 %x20 %x61' | ./binmake | hexdump -C
00000000  32 20 3d 20 61                                    |2 = a|
00000005

Или используйте файлы. Поэтому создайте свой текстовый файл file.txt:

# an exemple of file description of binary data to generate
# set endianess to big-endian
big-endian

# default number is hexadecimal
00112233

# man can explicit a number type: %b means binary number
%b0100110111100000

# change endianess to little-endian
little-endian

# if no explicit, use default
44556677

# bytes are not concerned by endianess
88 99 aa bb

# change default to decimal
decimal

# following number is now decimal
0123

# strings are delimited by " or '
"this is some raw string"

# explicit hexa number starts with %x
%xff

Создайте свой двоичный файл file.bin:

$ ./binmake file.txt file.bin
$ hexdump file.bin -C
00000000  00 11 22 33 4d e0 77 66  55 44 88 99 aa bb 7b 74  |.."3M.wfUD....{t|
00000010  68 69 73 20 69 73 20 73  6f 6d 65 20 72 61 77 20  |his is some raw |
00000020  73 74 72 69 6e 67 ff                              |string.|
00000027
1
daouzli

В дополнение к xxd, вы также должны взглянуть на пакеты/команды od и hexdump. Все они похожи, однако каждый из них предоставляет несколько разные опции, которые позволят вам адаптировать вывод к вашим нужным потребностям. Например, hexdump -C - это традиционный hexdump со связаннымASCIIпереводом по сторонам.

0
David C. Rankin