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

时间:2016-01-11 10:16:12

标签: shell sh

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

  

“myshell.sh:line 77:16 ## 0x00a002:无效的数字(错误令牌是   “16 ## 0x00a002”)

相关的代码行是:

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

有人可以告诉我:

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

2 个答案:

答案 0 :(得分:4)

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

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

这使用传统的POSIX ${variable#prefix}表示法来去除前缀。 #中的base#string$((255+255))表示法无关。

shell支持基本整数运算。算术运算独立于您使用的基数;像$((16#FF+16#FF))那样的简单加法等也可以使用base-16表示法printf,但请记住,只有整数的除法的用处相当有限。如果您想要十六进制的结果,printf "%04x\n" $((16#ff + 16#ff)) 可以做到这一点:

defaultLNNumberpad.backgroundColor = [UIColor whiteColor];

答案 1 :(得分:0)

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

SUBVER3_1 = $(printf“%x”$ SUBVER3_1)#从十进制转换为十六进制

这符合目的