it-swarm-pt.tech

Como criar um arquivo binário usando o Bash?

Como posso criar um arquivo binário com consequentes valores binários no bash?

gostar:

$ 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 ....

Em C, eu faço:

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);

isto é o que eu queria:

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

Há apenas 1 byte que você não pode transmitir como argumento na linha de comando do bash: 0 Para qualquer outro valor, você pode apenas redirecioná-lo. É seguro.

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

Para o valor 0, há outra maneira de enviá-lo para um arquivo

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

Para anexá-lo ao arquivo, use

dd if=/dev/zero oflag=append conv=notrunc of=binary.dat bs=1c count=1
16
zhaorufei

Talvez você possa dar uma olhada em xxd :

xxd : cria um dump hexadecimal de um determinado arquivo ou entrada padrão. Também pode converter um dump hexadecimal de volta à sua forma binária original.

9
Cédric Julien

Se você não se importa em não usar um comando existente e deseja descrever seus dados em um arquivo de texto, pode usar binmake que é um programa C++ que você pode compilar e usar da seguinte maneira:

Primeiro obtenha e compile binmake (o binário estará em bin/):

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

Crie seu arquivo de texto file.txt:

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

Gere seu arquivo binário file.bin:

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

Nota: você também pode usá-lo com stdin/stdout

2
daouzli

use o comando abaixo,

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