Bashに2つの256ビット16進数を追加しますか?

Bashに2つの256ビット16進数を追加しますか?

Bashコマンドを使用して16進英数字データを追加する必要があります。これは数値に適用されます。

total=$(( 55 + 60 )) 

しかし、英数字ではありません。英数字データを追加するための単純なbashコマンドはありますか?次のように大きな英数字データを追加します。

436389bdc34dd718c7959db8d6df16967f2b9895e515da45fb09136183a7a9e2
 +
1f0c45bbe9bc71a862f0d9672d056d2d741719a2b2d46ea6b269931d0b57674f 

答え1

すべてのPOSIXシェルと同様に、bash16進数の追加がサポートされています。

printf '%x\n' "$((0xfff + 0xaaa))"

(望むより:Bashスクリプトに2つの16進数を追加する方法)

最大64ビット整数に制限されます。

このように大きな数字の場合は、次のものを使用できますbc

{
  echo obase=16
  echo ibase=16
  echo 436389bdc34dd718c7959db8d6df16967f2b9895e515da45fb09136183a7a9e2 +\
       1f0c45bbe9bc71a862f0d9672d056d2d741719a2b2d46ea6b269931d0b57674f |
   LC_ALL=C tr a-f A-F
} | BC_LINE_LENGTH=0 bc

BC_LINE_LENGTH=0改行文字のGNU実装は防止されていますbc。他の実装では、パイプを代わりに使用できますsed 'N;s/\\\n//'

またはGNU awk-M任意精度算術サポートで構築されている場合):

$ gawk -M 'BEGIN{printf "%x\n", \ 
  0x436389bdc34dd718c7959db8d6df16967f2b9895e515da45fb09136183a7a9e2 + \
  0x1f0c45bbe9bc71a862f0d9672d056d2d741719a2b2d46ea6b269931d0b57674f}'
626fcf79ad0a48c12a86772003e483c3f342b23897ea48ecad72a67e8eff1131%

関連情報