Como transformar array de hex em array de base10 inteiros?

0
    local regex="s/rgb:\([^/]\+\)\/\([^/]\+\)\/\([^/]\+\)/  /p"
    local colors=$(xtermcontrol --get-bg | sed -n $regex)
    local base10_colors=()
    for i in 1 2 3; do
        $base10_colors[i]=$((16#$colors[i]))
    done

Eu tenho isso por enquanto, mas isso não funciona.

    
por user1685095 03.03.2017 / 17:10

1 resposta

0

Se você tem uma variável com um número hexadecimal, como 'FF00', e você quer convertê-la em decimal, então você pode usar bc :

hex='FF00'
dec=$( printf 'ibase=16; %s\n' "$hex" | bc )

Aqui, bc produzirá 65280 e o shell armazenará como uma string na variável dec .

Definindo o ibase=16 informa bc que a base de entrada é 16 (isto é, hexadecimal). Ele também tem uma variável obase (base de saída) que pode ser usada com ibase para conversões arbitrárias.

Se você tiver uma matriz de valores hexadecimais:

colors=( $(xtermcontrol --get-bg | sed -n $regex) )
typeset -a base10_colors
for hex in "${colors[@]}"; do
  base10_colors+=( "$( printf 'ibase=16; %s\n' "$hex" | bc )" )
done

Ou com essa sintaxe zsh :

colors=( $(xtermcontrol --get-bg | sed -n $regex) )
typeset -a base10_colors
for hex in "${colors[@]}"; do
  base10_colors+=( $((16#$hex)) )
done
    
por 03.03.2017 / 18:36