bc コマンドは入出力に16進数の値を取ることができます。
また、そこそこの速度でとてつもない桁の計算も可能なので、
Cネイティブでゴリゴリ書いたり、
Pythonみたいな軽量言語でやるよりスマートにいけたりします。
……まぁ、そんなのが必要なの僕以外にいるのかって話ですが……。
実際のところ
$ a=ABCDEF $ printf "obase=16;ibase=16; %s * 2 \n" $a | bc 1579BDE $ printf "obase=16;ibase=16; %s * %s \n" $a $a | bc 734CC2F2A521
参考もと
10進数で有効桁数を指定したい