在bash中添加两个256位十六进制数?

在bash中添加两个256位十六进制数?

我需要使用 bash 命令添加 16 进制字母数字数据。这适用于数字

total=$(( 55 + 60 )) 

但不是字母数字。是否有一个简单的 bash 命令用于添加字母数字数据?我正在添加像这样的大型字母数字数据:

436389bdc34dd718c7959db8d6df16967f2b9895e515da45fb09136183a7a9e2
 +
1f0c45bbe9bc71a862f0d9672d056d2d741719a2b2d46ea6b269931d0b57674f 

答案1

bash与所有 POSIX shell 一样,支持添加十六进制数字

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

(看:如何在 bash 脚本中添加两个十六进制数字

最多仅限于 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%

相关内容