I-III部分只涉及bash……
關於其他,請參看IV部分…… I: 利用obase, ibase和bc: ibase是輸入數位進位,而obase就是輸出數位進位了。很好記,i是input,o是output。
注意,16進位數位F要大寫, 否則,結果為0,是錯誤的。
舉例說明:
10進位轉2進位:
10進位轉16進位: (如果輸入是10進位的話,ibase可省略)
16進位轉2進位:
16進位轉10進位:(此時,只需指定ibase即可)
II: 利用echo的base#:
$((base#number))
#其中number是欲轉化的數,base是其進位數.(base也可省略,number預設是十進位,如果以0,或0x則分別是八進位和十六進位). #echo $((012)) #8進位,結果為10 #echo $((0xFF)) #16進位,結果為255 #echo $((0xEF)) #echo $((0xFFFF)) #echo $((2#1101011)) #echo $((2#11111111)) #2進位,結果為255 #echo $((8#255)) #8進位,結果為173 #echo $((8#377)) #16進位,結果為217 #echo $((16#D9)) #echo $((16#FF)) #有base不用0x,不然報錯。8進位沒問題!
另外這個用法還可以擴充:
$((base#number^base#Base1)) #可以理解為number和Base1這兩者按照base進位做了個異或操作.
比如: #base=1f #Base1=ff #echo $((16#$base^16#$Base1)) 224 #這個例子就表示,base(1f)和Base1(ff)按照16進位做了異或操作(結果為e0,即224) III: 例子:
Question:
現在想對兩個位元據進行 或 運算, 如
a= 1101
b= 1000
c= a|b
以二進位格式輸出c = 1101 ???
Answer: [Bob@hzling08:~]-No.96-$ a=1101; b=1000 [Bob@hzling08:~]-No.97-$ d=`echo $(($((2#$a))|$((2#$b)))) | bc` [Bob@hzling08:~]-No.98-$ echo "obase=2; $d" | bc 1101
其實可以寫成一句: [Bob@hzling08:~]-No.99-$ echo "obase=2;$(($((2#$a))|$((2#$b))))" | bc 1101 IV: 補充:
1. 利用awk: #十六進位轉十進位 echo 0x2A | gawk '$1=strtonum($1)' #科學計數法轉十進位 printf "%f\n" 3.1188622400e+06 echo 3.1188622400e+06 | awk '{printf("%f\n",$0)}' #科學計數法轉十進位並保留兩位小數 echo 3.1188622400e+06 | awk '{printf("%.2f\n",$0)}' #科學計數法轉十進位並取整 printf "%.f\n" 3.1188622400e+06 echo 3.1188622400e+06 | awk '{printf("%d\n",$0)}' #科學計數法轉十進位並四捨五入取整 echo 3.1188622400e+06 | awk '{printf("%d\n",