Grava valores hexadecimais no arquivo binário com o bash

3

Como posso escrever um número específico de zeros em um arquivo binário automaticamente?

Eu escrevo:

#!/bin/bash
for i in {0..127};
do
    echo -e -n "\x00" >> file.bin
done

Mas, olhando o arquivo com as saídas Bless: 2D 65 20 2D 6E 20 5C 78 30 30 0A , que corresponde a -e -n \x00 .

    
por Javier 10.07.2017 / 13:19

2 respostas

4

printf deve ser portátil e suporta escapes de caracteres octal:

i=0
while [ "$i" -le 127 ]; do
    printf '
i=0
while [ "$i" -le 127 ]; do
    printf '%pre%0'
    i=$((i+1)) 
done >> file.bin
0' i=$((i+1)) done >> file.bin

( printf não é necessário para suportar escapes hexadecimais como \x00 , mas um número de shells suporta isso.)

Veja Por que printf é melhor que echo? para os problemas com echo .

    
por 10.07.2017 / 13:28
3

Se forem zeros em um arquivo, o mais óbvio será:

dd if=/dev/zero of=file.bin bs=1 count=128  

Note que isso é bastante ineficiente, como acontece com gravações de byte único. Você poderia facilmente usar:

dd if=/dev/zero of=file.bin bs=128 count=1  

Aqui, bs' is the 'block size' and count 'é quantos blocos. Melhor escrever um bloco do que muitos pequenos!

Note que os comandos acima não são anexados a file.bin , eles o sobrescrevem. Uma maneira de contornar isso é:

dd if=/dev/zero bs=128 count=1 >> file.bin  

Explicação: na ausência de of= , dd grava na saída padrão, que é então anexada ao arquivo de saída.

    
por 10.07.2017 / 13:52

Tags