создать двоичный файл в Bash - PullRequest
11 голосов
/ 15 декабря 2011

Как мне создать двоичный файл с последующими двоичными значениями в bash?

вроде:

$ hexdump testfile
0000000 0100 0302 0504 0706 0908 0b0a 0d0c 0f0e
0000010 1110 1312 1514 1716 1918 1b1a 1d1c 1f1e
0000020 2120 2322 2524 2726 2928 2b2a 2d2c 2f2e
0000030 ....

В C я делаю:

fd = open("testfile", O_RDWR | O_CREAT);
for (i=0; i< CONTENT_SIZE; i++)
{
    testBufOut[i] = i;
}

num_bytes_written = write(fd, testBufOut, CONTENT_SIZE);
close (fd);

это то, что я хотел:

#! /bin/bash
i=0
while [ $i -lt 256 ]; do
    h=$(printf "%.2X\n" $i)
    echo "$h"| xxd -r -p
    i=$((i-1))
done

Ответы [ 4 ]

13 голосов
/ 12 января 2012

В командной строке bash нельзя передать только 1 байт: 0 Для любого другого значения вы можете просто перенаправить его. Это безопасно.

echo -n $'\x01' > binary.dat
echo -n $'\x02' >> binary.dat
...

Для значения 0 есть еще один способ вывести его в файл

dd if=/dev/zero of=binary.dat bs=1c count=1 

Чтобы добавить его в файл, используйте

dd if=/dev/zero oflag=append conv=notrunc of=binary.dat bs=1c count=1
8 голосов
/ 15 декабря 2011

Может быть, вы могли бы взглянуть на xxd :

xxd : создает шестнадцатеричный дамп данного файла или стандартного ввода. Оно может также преобразовать шестнадцатеричный дамп обратно в исходную двоичную форму.

2 голосов
/ 17 июня 2016

Если вы не возражаете не использовать существующую команду и хотите описать ваши данные в текстовом файле, вы можете использовать binmake , программу на C ++, которую вы можете скомпилировать и использовать следующим образом:

Сначала получите и скомпилируйте binmake (двоичный файл будет в bin/):

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

Создайте свой текстовый файл file.txt:

big-endian
00010203
04050607
# separated bytes not concerned by endianess
08 09 0a 0b 0c 0d 0e 0f

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

$ ./binmake file.txt file.bin
$ hexdump file.bin
0000000 0100 0302 0504 0706 0908 0b0a 0d0c 0f0e               
0000008

Примечание: вы также можете использовать его с stdin / stdout

0 голосов
/ 16 ноября 2018

используйте команду ниже,

i=0; while [ $i -lt 256 ]; do echo -en '\x'$(printf "%0x" $i)''  >> binary.dat; i=$((i+1));  done
...