web-dev-qa-db-ja.com

文字列をbashで16進数として読み取る方法は?

私はbash行を持っています:

expr substr $SUPERBLOCK 64 8

それは私に文字列の行に戻ります:

00080000

これは実際にはリトルエンディアンの0x00080000であることを知っています。 0x80000のようなビッグエンディアンのbashでそれから整数変数を作成する方法はありますか?

7
DenisNovac

おそらくこれを行うにはより良い方法ですが、数値を10進数に変換してから16進数に戻すこのソリューションを思いついた(そして手動で0x):

printf '0x%x\n' "$((16#00080000))"

あなたは次のように書くことができます:

printf '0x%x\n' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"
8
jesse_b

異なる基数間で数値を変換する非常に簡単な方法を提供する、多かれ少なかれ2つの標準(および古くからある)コマンドラインUNIXツールがあります。

$ { echo '16'; echo i; echo 00080000; echo p; } | dc
524288
$ { echo 'ibase=16'; echo 00080000; } | bc  
524288

通常の人間の使用ではbcを非常に好みますが、特にある種のパーサーからコードを生成するプログラムを作成する場合、dcのようなスタックベースのツールの方が扱いやすいかもしれません(そして実際、bcの元のバージョンはdcのフロントエンドパーサーでした)。

5
Greg A. Woods