如何使用linux命令将包含十六进制的文本文件转换为二进制文件?

新手上路,请多包涵

我有文本(字符串)格式的二进制十六进制代码。如何使用 cat 和 echo 等 Linux 命令将其转换为二进制文件?

我知道创建二进制 test.bin 的命令之后的命令。但是如果这个十六进制代码在另一个 .txt 文件中呢?如何将文本文件的内容“cat”到“echo”并生成二进制文件?

# echo -e "\x00\x001" > test.bin

原文由 aMa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3k
2 个回答

使用 xxd -r 。它将十六进制转储还原为其二进制表示。

来源来源

编辑-p 参数也非常有用。它接受“普通”十六进制值,但忽略空格和行更改。

因此,如果您有这样的纯文本转储:

 echo "0000 4865 6c6c 6f20 776f 726c 6421 0000" > text_dump

您可以使用以下方法将其转换为二进制:

 xxd -r -p text_dump > binary_dump

然后通过以下方式获得有用的输出:

 xxd binary_dump

原文由 1010 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果文件中有长文本或文本,您还可以使用 binmake 工具,该工具允许您以文本格式描述一些二进制数据并生成二进制文件(或输出到标准输出)。它允许更改字节序和数字格式并接受评论。

它的默认格式是十六进制但不限于此。

首先获取并编译 binmake

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

您可以使用 stdinstdout 进行管道传输:

 $ echo '32 decimal 32 61 %x20 %x61' | ./binmake | hexdump -C
00000000  32 20 3d 20 61                                    |2 = a|
00000005

或者使用文件。所以创建你的文本文件 file.txt

 # an exemple of file description of binary data to generate
# set endianess to big-endian
big-endian

# default number is hexadecimal
00112233

# man can explicit a number type: %b means binary number
%b0100110111100000

# change endianess to little-endian
little-endian

# if no explicit, use default
44556677

# bytes are not concerned by endianess
88 99 aa bb

# change default to decimal
decimal

# following number is now decimal
0123

# strings are delimited by " or '
"this is some raw string"

# explicit hexa number starts with %x
%xff

生成二进制文件 file.bin

 $ ./binmake file.txt file.bin
$ hexdump file.bin -C
00000000  00 11 22 33 4d e0 77 66  55 44 88 99 aa bb 7b 74  |.."3M.wfUD....{t|
00000010  68 69 73 20 69 73 20 73  6f 6d 65 20 72 61 77 20  |his is some raw |
00000020  73 74 72 69 6e 67 ff                              |string.|
00000027

原文由 daouzli 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题