Adiciona dois números hexadecimais de 256 bits no bash?

1

Eu preciso adicionar dados alfanuméricos de base 16 usando o comando bash. Isso funciona para números

total=$(( 55 + 60 )) 

mas não alfanumérico. Existe um comando bash simples para adicionar dados alfanuméricos? Estou adicionando grandes dados alfanuméricos como este:

436389bdc34dd718c7959db8d6df16967f2b9895e515da45fb09136183a7a9e2
 +
1f0c45bbe9bc71a862f0d9672d056d2d741719a2b2d46ea6b269931d0b57674f 
    
por RainyDay 26.03.2018 / 07:58

1 resposta

3

Enquanto bash , como todos os shells POSIX suportam a adição de números hexadecimais com

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

(consulte: Como adicionar dois números hexadecimais em um script bash )

Isso é limitado a, no máximo, 64 bits inteiros.

Para números tão grandes, você pode usar 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 evita a quebra da linha com a implementação GNU de bc . Com outras implementações, você pode canalizar para sed 'N;s/\\n//' .

Ou GNU awk com -M (se construído com suporte aritmético de precisão arbitrária):

$ gawk -M 'BEGIN{printf "%x\n", \ 
  0x436389bdc34dd718c7959db8d6df16967f2b9895e515da45fb09136183a7a9e2 + \
  0x1f0c45bbe9bc71a862f0d9672d056d2d741719a2b2d46ea6b269931d0b57674f}'
626fcf79ad0a48c12a86772003e483c3f342b23897ea48ecad72a67e8eff1131%
    
por 26.03.2018 / 08:54