Como converter uma string em um número interpretado em determinada base no script bash?

5

Estou simplesmente tentando converter uma string $RECORD_HDR em um número $RECORD_SIZE , onde

echo $RECORD_HDR dá 003D e echo $RECORD_SIZE deve dar 61

    
por codesurfer 02.12.2014 / 23:45

3 respostas

4

De bash manual:

Constants with a leading 0 are interpreted as octal numbers. A leading 0x or 0X denotes hexadecimal.

Assim:

$ RECORD_HDR="003D"
$ RECORD_SIZE=$((0x$RECORD_HDR))
$ echo "$RECORD_SIZE"
61
    
por 02.12.2014 / 23:54
0

Veja algumas maneiras:

Usando a calculadora bc e definindo explicitamente a base de entrada (bastante portátil):

RECORD_SIZE='echo "ibase=16;$RECORD_HDR" | bc'

Usando avaliação aritmética com uma base explícita (ksh e bash, pelo menos - não tenho certeza de quão portátil é essa construção):

RECORD_SIZE=$((16#$RECORD_HDR))
    
por 02.12.2014 / 23:56
0

Você pode usar a biblioteca de Velud do awk:

$ velour -n 'print mt_basecon("3D", 16, 10)'
61

Ou:

$ velour -n 'print mt_basecon(ARGV[1], 16, 10)' 3D
61
    
por 30.03.2017 / 02:42