如何将十六进制数组转换为以 10 为基数的整数数组?

如何将十六进制数组转换为以 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

如果您有一个带有十六进制数字的变量,例如“FF00”,并且您想将其转换为十进制,那么您可以使用bc

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

这里,bc将输出65280,shell 会将其作为字符串存储在变量 中dec

设置ibase=16表明bc输入基数为 16(即十六进制)。它还具有一个obase变量(输出基数),可用于ibase任意转换。

如果您有一个十六进制值数组:

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

相关内容