バイナリファイルが与えられたら、そのような標準ツールのみを使用して、最小インストールされたシステムでどのようにsed
それを16進文字列に変換して戻すことができますか?cut
busybox
これらのツールはいいえ書くことができる:
perl
python
xxd
(vim付属)gcc
hexdump
コマンドに付属していますが、付属busybox
のコマンドとは異なりますutil-linux
。
ファイルを16進文字列に変換するスクリプトまたはコマンドと、それをバイナリに変換する対応するスクリプトまたはコマンドを探しています。中間形式は16進数である必要はなく、base64または他の形式にすることもできます。
これは、ディスク容量が制限された組み込みデバイスに適しています。
ベストアンサー1
以下は私が思いついたものです(いくつかのオンラインリソースといくつかの実験に基づいています)。
16進数から2進数()への変換hex2bin
:
#!/bin/sh
sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' "$1" | xargs printf
binを16進数(bin2hex
)に変換する:
#!/bin/sh
hexdump -v -e '1/1 "%02x"' "$1"
使用例:
./bin2hex binary_file_1 | ./hex2bin - > binary_file_2
diff -s binary_file_1 binary_file_2
これはbusyboxで動作しますが、残念ながらhex2binは指定されたパラメータの最大長に制限されるため、xargs
この方法は小さなファイル(デスクトップシステムでは32KiB未満)でのみ機能します。