2012-11-21 209 views

回答

6

至少bash直接支持十六進制整數,只要它們的前綴爲0x

$ [[ 0xdead -lt 0xcafe ]] && echo yes || echo no 
no 
$ [[ 0xdead -gt 0xcafe ]] && echo yes || echo no 
yes 

你只需要使用比較操作符通常...

+0

嘿,我還有一個疑問:如何檢查輸入是數字還是字符串? – bd1257

0

如何

(("$answer" == 0x42)) 
echo $? 

answer=0xDEADCAFE 
(("$answer" == 0xDEADCAFE)) 
echo $? 
+0

a,b,c,d,e,f? – bd1257

+0

@ user1812956應該正常工作 – cnicutar

0

其實@thkala答案只適用於不超過0x7fffffffffffffffLLONG_MAX)的號碼:

$ [[ 0xa000000000000000 -lt 0x6000000000000000 ]] && echo -1                                              
-1 
$ [[ 0xa00000000000000 -lt 0x600000000000000 ]] && echo -1 || echo 1 
1 

對於數字大於LLONG_MAX你可以使用gdb,但它的工作原理,當然要慢

function cmp()                                
{                                   
    gdb -ex "p ${1}ULL == ${2}ULL ? 0 : (${1}ULL < ${2}ULL ? -1 : 1)" -batch |& grep '^$1' | cut -d' ' -f3                                          
} 

$ cmp 0xa000000000000000 0x6000000000000000 
1 
$ cmp 0xa00000000000000 0x600000000000000 
1 
+0

其實@thkala答案只適用於不大於0x7fffffffffffffff(LLONG_MAX)的數字。對於大於LLONG_MAX的數字,您可以使用gdb,但它當然會工作得更慢。 (看看這些信息如何很好地,而不是直接回答這個問題,它適合於**評論**)(還剩下300個字符) –