数字无效(错误标记为“16##0x00a002”)

Invalid number (error token is "16##0x00a002")

我想将十六进制值转换为十进制值,执行一些算术运算并将其转换回十六进制。 在尝试这样做时,我遇到了以下错误,

"myshell.sh: line 77: 16##0x00a002: invalid number (error token is "16##0x00a002")

相关的代码行是:

SUBVER3_1=$((16##$SUBVER3_1))

谁能告诉我:

  1. 这是什么错误,我该如何解决?
  2. 如何对shell中的十六进制数进行算术运算?

0x 前缀对 base 16 表示法无效。在转换之前将其剥离。此外,如果您使用 Bash,则基本转换的语法在基本之后使用单个 #

SUBVER3_1=$((16#${SUBVER3_1#0x}))

这使用传统的 POSIX ${variable#prefix} 表示法去除前缀。其中的 #base#string 符号无关。

shell支持基本的整数运算。算术运算与您使用的基数无关;像 $((255+255)) 这样的简单加法等也可以使用 base-16 表示法 $((16#FF+16#FF)) 但请记住,只用整数除法的用处相当有限。如果你想要十六进制的结果,printf 可以这样做:

printf "%04x\n" $((16#ff + 16#ff))

问题现已解决, 我使用 print 语句来解决这个问题,而不是上面的语句

SUBVER3_1=$(printf "%x" $SUBVER3_1) # 十进制转十六进制

达到目的了