Bashでは、PHPを呼び出して次のコマンドを実行できます。
testKey='8798(*&98}9%"^8&]8_98{9798**76876'
testHex=$(php -r "echo bin2hex('$testKey');")
echo $testHex
これにより
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736
PHPが利用できないシステムがあります。 bashだけを使って同じ結果を得る方法はありますか?
ありがとう
答え1
横になっている場合hexdump
:
$ printf "%s" "$testKey" | hexdump -ve '/1 "%x"'
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736
-e
hexdump
「二重引用符(」)で囲む必要があるフォーマット文字列を設定します。/1
フォーマット文字列は一度に1バイトを使用して%x
16進数で印刷されます(そうでないと、バイト順序によって異なる出力が発生する可能性があります)-v
。デフォルトは)に置き換えることです*
。
答え2
はい、xxd
同じことができます。
testKey='8798(*&98}9%"^8&]8_98{9798**76876'
testHex=$(echo -n "${testKey}" | xxd -p -c 100)
-pフラグは、オフセット情報のない16進ダンプに使用されます。
-c 100フラグは、100文字(デフォルトは16、最大256)の行長に適用されます。
答え3
「Just bash」として次のトリックを使用します。BASH印刷の問題(printf \ $(printf '%03o' $ 1))
$ for ((i=0;i<${#testKey};i++)); do printf '%x' "$(printf "'%c" "${testKey:i:1}")"; done; echo
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736
パールを使ってunpack
$ perl -E 'say unpack "H*", $ARGV[0]' "$testKey"
38373938282a2639387d3925225e38265d385f39387b393739382a2a3736383736