14

如何在 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

4 回答 4

18

只有 1 个字节不能作为 bash 命令行中的参数传递: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
于 2012-01-12T07:35:47.757 回答
10

也许你可以看看xxd

xxd :创建给定文件或标准输入的十六进制转储。它还可以将十六进制转储转换回其原始二进制形式。

于 2011-12-15T14:02:58.887 回答
2

如果您不介意不使用现有命令并想在文本文件中描述您的数据,您可以使用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 一起使用

于 2016-06-17T13:35:17.023 回答
1

使用以下命令,

i=0; while [ $i -lt 256 ]; do echo -en '\x'$(printf "%0x" $i)''  >> binary.dat; i=$((i+1));  done
于 2018-11-15T21:42:18.743 回答