使用 bash 将十六进制值写入二进制文件

Rod*_*igo 4 bash binary

如何自动在二进制文件中写入特定数量的零?

我写的:

#!/bin/bash
for i in {0..127};
do
    echo -e -n "\x00" >> file.bin
done
Run Code Online (Sandbox Code Playgroud)

但是查看带有 Bless 输出的文件:2D 65 20 2D 6E 20 5C 78 30 30 0A对应于-e -n \x00.

ilk*_*chu 5

printf应该是可移植的并且支持八进制字符转义:

i=0
while [ "$i" -le 127 ]; do
    printf '\000'
    i=$((i+1)) 
done >> file.bin
Run Code Online (Sandbox Code Playgroud)

printf不需要像 那样支持十六进制转义\x00,但许多 shell 支持这一点。)

请参阅为什么 printf 比 echo 更好?对于 的麻烦echo


Bob*_*ger 5

如果文件为零,那么显而易见的是:

dd if=/dev/zero of=file.bin bs=1 count=128  
Run Code Online (Sandbox Code Playgroud)

请注意,这是非常低效的,因为它执行单字节写入。您可以同样轻松地使用:

dd if=/dev/zero of=file.bin bs=128 count=1  
Run Code Online (Sandbox Code Playgroud)

这里,bs' is the 'block size' andcount` 是多少块。写一个块比写很多小块要好!

请注意,上述命令不会附加到file.bin,而是会覆盖它。一种方式是:

dd if=/dev/zero bs=128 count=1 >> file.bin  
Run Code Online (Sandbox Code Playgroud)

说明:在没有 的情况下of=dd写入标准输出,然后将其附加到输出文件。

  • 或者只是`head -c123 /dev/zero >> file.bin` 123 的任意值。(无需明确考虑块大小) (2认同)