从二进制转换为十六进制并返回

Ale*_*der 10 embedded busybox hexdump

给定一个二进制文件,如何在安装了的最小系统上仅使用sedcut等标准工具将其转换为十六进制字符串并返回busybox

这些工具不可用:

  • perl
  • python
  • xxd (带有vim)
  • gcc

hexdump命令随附busybox,但与随附的命令不同util-linux

我正在寻找将文件转换为十六进制字符串的脚本或命令,以及将其转换回二进制的相应脚本或命令。中间格式不必是十六进制,它可以是 base64 或其他格式。

这适用于磁盘空间有限的嵌入式设备。

Ale*_*der 13

这是我想出的(基于几个在线资源和一些实验)。

从十六进制转换为 bin ( hex2bin):

#!/bin/sh
sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' "$1" | xargs printf
Run Code Online (Sandbox Code Playgroud)

从 bin 转换为十六进制 ( bin2hex):

#!/bin/sh
hexdump -v -e '1/1 "%02x"' "$1"
Run Code Online (Sandbox Code Playgroud)

使用示例:

./bin2hex binary_file_1 | ./hex2bin - > binary_file_2
diff -s binary_file_1 binary_file_2
Run Code Online (Sandbox Code Playgroud)

这适用于busybox,但不幸的是,hex2bin 受到给定参数的最大长度的限制xargs,因此此方法仅适用于小文件(在我的桌面系统上小于 32 KiB)。

  • bin2hex 不能只是`hexdump -v -e '1/1 "%02x"' "$1"` (2认同)