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

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

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

我写的:

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

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

答案1

printf应该是便携式的并支持八进制字符转义:

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

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

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

答案2

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

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

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

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

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

请注意,上述命令的作用是不是附加到file.bin,他们会覆盖它。一种方法是:

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

说明:如果没有of=dd则写入标准输出,然后将其附加到输出文件。

答案3

  1. printf将为所有参数重新使用相同的格式。
  2. 该格式%.0s不会打印其参数的任何部分。

将这些结合起来就可以得到相当不错的效果

$ printf '\0%.0s' {1..128} >128nulls

128 个空值。

相关内容