コマンドライン上で手軽に16進計算

  • 11
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

10進/16進の変換なら printf コマンドでフォーマット変換する方法があります。

$ alias hex2dec="printf '%d\n'"
$ alias dec2hex="printf '%x\n'"

$ hex2dec 0x64 0xC9 0x14
100
201
20

$ dec2hex 100 201 20
64
c9
14

bc コマンドをつかうと、16進(任意の基数)での計算ができます。

$ echo "obase=10;ibase=16;FF00+FF" | bc
65535
$ echo "obase=16;ibase=16;100*100*100-1" | bc
FFFFFF
$ echo "obase=2;ibase=16;F0-1" | bc
11101111

ibase が入力値の基数で、obase が出力値の基数です。obase の値は直前の ibase で指定した基数で評価されますので、ibase は最後に指定するとよいです。

# 出力値は10進のつもりだが、16進(ibase=16)の 0x10 で評価されている
$ echo "ibase=16;obase=10;FF" | bc
FF
# 16進なら 0x0A で指定
$ echo "ibase=16;obase=0A;FF" | bc
255
# ややこしくなるので ibase を最後に指定するとよい
$ echo "obase=10;ibase=16;FF" | bc
255