数字无效(错误标记为“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))
谁能告诉我:
- 这是什么错误,我该如何解决?
- 如何对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) # 十进制转十六进制
达到目的了
我想将十六进制值转换为十进制值,执行一些算术运算并将其转换回十六进制。 在尝试这样做时,我遇到了以下错误,
"myshell.sh: line 77: 16##0x00a002: invalid number (error token is "16##0x00a002")
相关的代码行是:
SUBVER3_1=$((16##$SUBVER3_1))
谁能告诉我:
- 这是什么错误,我该如何解决?
- 如何对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) # 十进制转十六进制
达到目的了