Linuxで16進数の足し算をする方法
小粋空間 » Linux » Linuxで16進数の足し算をする方法
Linuxで16進数の足し算をする方法を紹介します。
1.問題点
仕事で、Linuxのシェルで下記の16進数の足し算をする必要が生じました。
35dbdf123 + 8
とりあえずコマンドライン上で16進数の足し算をしてみようと思ったのですが、方法が分かりません。
ということで、コマンドラインで16進数の足し算をする方法を紹介します。
2.コマンドラインで16進数の足し算をする
コマンドラインで16進数の足し算をするには、次のようにします。
% echo "obase=16;ibase=16;35DBF123+8" | bc
35DBF12B
これで目的の計算結果を得ることができました。
3.bcについて
bcは、Lunuxのmanコマンド上は「任意精度の計算言語」のためのコマンドと定義されています。
ibase、obaseはbcコマンドの特殊変数で、
- ibase:入力の変換基数を指定
- obase:出力の変換基数を指定
となっています。
それぞれのデフォルト値はともに10(10進数)ですが、今回の例では16進数である"16"を指定します。
また、ibaseとobaseの指定順序はobaseを先に記述することを推奨します。
この例でibaseを先に指定してしまうと、ibaseの指定がobaseに反映されてしまい、obaseを16進数で指定しなければならなくなります。
ibaseを先に指定した場合の計算結果(期待通りにならない)
% echo "ibase=16;obase=16;35DBF123+8" | bc
07 21 07 07 13 15 21
obaseを16進数で"16(10)"を指定した場合の計算結果(期待通り)
% echo "ibase=16;obase=10;35DBF123+8" | bc
35DBF12B
ということで、10進数で指定するためにobaseを先に指定することを推奨します。
変換基数を指定した後、実際の計算情報"35DBF123+8"を記述します。
16進数の場合、計算値に"0-9"および"A-F"を利用できます。
A-Fは大文字でなければなりません。小文字で計算すると下記のシンタックスエラーになります。
% echo "obase=16;ibase=16;35dbf123+8" | bc
(standard_in) 1: syntax error