私はbash行を持っています:
expr substr $SUPERBLOCK 64 8
それは私に文字列の行に戻ります:
00080000
これは実際にはリトルエンディアンの0x00080000であることを知っています。 0x80000のようなビッグエンディアンのbashでそれから整数変数を作成する方法はありますか?
おそらくこれを行うにはより良い方法ですが、数値を10進数に変換してから16進数に戻すこのソリューションを思いついた(そして手動で0x
):
printf '0x%x\n' "$((16#00080000))"
あなたは次のように書くことができます:
printf '0x%x\n' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"
異なる基数間で数値を変換する非常に簡単な方法を提供する、多かれ少なかれ2つの標準(および古くからある)コマンドラインUNIXツールがあります。
$ { echo '16'; echo i; echo 00080000; echo p; } | dc
524288
$ { echo 'ibase=16'; echo 00080000; } | bc
524288
通常の人間の使用ではbc
を非常に好みますが、特にある種のパーサーからコードを生成するプログラムを作成する場合、dc
のようなスタックベースのツールの方が扱いやすいかもしれません(そして実際、bc
の元のバージョンはdc
のフロントエンドパーサーでした)。