我想將十六進制值轉換爲十進制值,執行一些算術運算並將其轉換回十六進制。 在試圖這樣做,我對着下面的錯誤,無效號碼(錯誤標記爲「16 ## 0x00a002」)
「myshell.sh:線77:16 ## 0x00a002:無效號碼(誤差記號是 「16 ## 0x00a002」)
代碼的相關行是:
SUBVER3_1=$((16##$SUBVER3_1))
有人可以讓我知道:
- 這個錯誤是什麼,我該如何解決它?
- 如何在shell中對十六進制數進行算術運算?
我想將十六進制值轉換爲十進制值,執行一些算術運算並將其轉換回十六進制。 在試圖這樣做,我對着下面的錯誤,無效號碼(錯誤標記爲「16 ## 0x00a002」)
「myshell.sh:線77:16 ## 0x00a002:無效號碼(誤差記號是 「16 ## 0x00a002」)
代碼的相關行是:
SUBVER3_1=$((16##$SUBVER3_1))
有人可以讓我知道:
0x
前綴對於基數爲16的表示法無效。在轉換之前將其剝離。此外,如果您使用Bash,則基礎轉換的語法在基礎之後使用單個#
。
SUBVER3_1=$((16#${SUBVER3_1#0x}))
這使用了傳統的POSIX ${variable#prefix}
表示法來剝離的前綴。 #
與base#string
表示法無關。
shell支持基本整數算術。算術運算獨立於您正在使用的基礎;簡單的添加等,如$((255+255))
也可以使用基數爲16的符號,也可以使用$((16#FF+16#FF))
,但請記住,只有整數的除法的用處非常有限。如果你想在十六進制結果,printf
能做到這一點:
printf "%04x\n" $((16#ff + 16#ff))
'16 ##'是一個shell特有的特性,還是由POSIX指定的東西? –
它不在POSIX中,儘管我相信'ksh'和'zsh'也支持類似的東西。 OP使用Bash算術評估語法,所以這就是我猜他們實際使用的。 – tripleee
[POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04)雖然似乎表示支持'0x'前綴本身。 –
的問題已經解決, 我用過的打印語句來解決這個問題,而不是上述聲明
SUBVER3_1 = $(printf的「%的X」 $ SUBVER3_1)#從十進制轉換爲十六進制
該服務的目的
的[十進制轉換爲十六進制,在UNIX shell腳本]可能的複製(http://stackoverflow.com/questions/378829/convert-十進制到十六進制在UNIX的殼-script) –
你的腳本代碼段是無效的'sh' - 你應該用'bash'(恕我直言,最可能的),'ksh'或'zsh'來標記它。 – tripleee