2進数から16進数に変換するか、その逆に変換

2進数から16進数に変換するか、その逆に変換

バイナリファイルが与えられたら、そのような標準ツールのみを使用して、最小インストールされたシステムでどのようにsedそれを16進文字列に変換して戻すことができますか?cutbusybox

これらのツールはいいえ書くことができる:

  • 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未満)でのみ機能します。

おすすめ記事