16진수 배열을 기본 10의 정수 배열로 변환하는 방법은 무엇입니까?

16진수 배열을 기본 10의 정수 배열로 변환하는 방법은 무엇입니까?
    local regex="s/rgb:\([^/]\+\)\/\([^/]\+\)\/\([^/]\+\)/\1 \2 \3/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

지금 가지고 있지만 작동하지 않습니다.

답변1

16진수 변수가 있고 "FF00"이라고 말하고 이를 10진수로 변환하려면 다음을 사용할 수 있습니다 bc.

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

여기서 bc출력은 출력되고 65280쉘은 이를 변수에 문자열로 저장합니다 dec.

설정은 입력 기수가 16(즉, 16진수)임을 ibase=16나타냅니다 . 또한 임의 변환 에 사용할 수 있는 변수(출력 기반) bc도 있습니다 .obaseibase

16진수 값의 배열이 있는 경우:

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

또는 다음 zsh구문을 사용하세요.

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

관련 정보