1. 程式人生 > >Bash指令碼中進位制轉換

Bash指令碼中進位制轉換

修改指令碼時,想直接用10進位制轉換為16進位制的方法,在網上搜了搜,結果是找到了,可惜所用系統中沒有對應的指令,還是用不成,最後就用了一個比較笨一點的方法。

既然有需要,就把搜到感覺有用的進位制轉換函式或指令都貼在這裡,便於以後應用。

shell可以在不呼叫第3方命令,表示不同進位制資料。這裡總結以下表示方法。shell 指令碼預設數值是由10 進位制數處理,除非這個數字某種特殊的標記法或字首開頭. 才可以表示其它進位制型別數值。如:以 0 開頭就是 8 進位制.以0x 開頭就是16 進位制數.使用 BASE#NUMBER 這種形式可以表示其它進位制.BASE值:2-64.

使用方法:

  • 其它進位制轉為10進位制

八進位制轉十進位制:

[[email protected] ~]$ ((num=0123));
[[email protected] ~]$ echo $num;
83

[[email protected] ~]$ ((num=8#123));
[[email protected] ~]$ echo $num;    
83

((表示式)),(())裡面可以是任意資料表示式。如果前面加入:”$”可以讀取計算結果。

十六進位制轉十進位制:

[[email protected] ~]$ ((num=0xff)); 
[[email protected]

~]$ echo $num;    
255
[[email protected] ~]$ ((num=16#ff));
[[email protected] ~]$ echo $num;    
255

base-32轉十進位制:

[[email protected] ~]$ ((num=32#ffff));
[[email protected] ~]$ echo $num;      
507375

base64轉十進位制:

[[email protected] ~]$ ((num=64#abc_)); 
[[email protected]

~]$ echo $num;       
2667327

二進位制轉十進位制

[[email protected] ~]$ ((num=2#11111111));  
[[email protected] ~]$ echo $num;
255

  • 十進位制轉為其它進位制

十進位制轉八進位制

這裡使用到:bc外部命令完成。bc命令格式轉換為:echo "obase=進位制;值"|bc

[[email protected] ~]$ echo "obase=8;01234567"|bc
4553207

二進位制,十六進位制,base64轉換為 十進位制也相同方法。

[[email protected] ~]$ echo "obase=64;123456"|bc  
30 09 00

shell,內建各種進製表示方法非常簡單。記得base#number 即可。這裡記得賦值時候用(())符號。不能直接用=號了。=號沒有值型別。預設將後面變成字串了。如:

[[email protected] ~]$ num=0123;
[[email protected] ~]$ echo $num;
0123

0開頭已經失去了意義了。

可以通過定義符:let達到(()) 運算效果。

[[email protected] ~]$ let num=0123;
[[email protected] ~]$ echo $num;   
83

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Example 12-46 將10進位制數字轉換為16進位制數字
################################Start Script#######################################
 1 #!/bin/bash
 2 # hexconvert.sh: 將10進位制數字轉換為16進位制數字
 3 
 4 E_NOARGS=65 # 缺命令列引數錯誤.
 5 BASE=16     # 16進位制.
 6 
 7 if [ -z "$1" ]
 8 then
 9   echo "Usage: $0 number"
10   exit $E_NOARGS
11   # 需要一個命令列引數.
12 fi
13 # 練習: 新增命令列引數檢查.
14 
15 
16 hexcvt ()
17 {
18 if [ -z "$1" ]
19 then
20   echo 0
21   return    # 如果沒有引數傳遞到這個函式中就 "return" 0.
22 fi
23 
24 echo ""$1" "$BASE" o p" | dc
25 #                 "o" 設定輸出的基數(數制).
26 #                   "p" 列印棧頂.
27 # 察看 dc 的 man 頁來了解其他的選項.
28 return
29 }
30 
31 hexcvt "$1"
32 
33 exit 0

相關推薦

Bash指令碼轉換

修改指令碼時,想直接用10進位制轉換為16進位制的方法,在網上搜了搜,結果是找到了,可惜所用系統中沒有對應的指令,還是用不成,最後就用了一個比較笨一點的方法。 既然有需要,就把搜到感覺有用的進位制轉換函式或指令都貼在這裡,便於以後應用。 shell可以在不呼叫第3方命

linux轉換

  方式一:使用$[]或$(()) 格式為:$[base#number]或$((base#number)),其中base為進位制,number為對應進位制數。 這種方式輸入2進位制、16進位制等,但只能輸出為10進位制,如下: [email protected] ~ # echo

python轉換及IP地址轉換

各進位制之間轉換: 1 # 轉二進位制用bin(int(x,n)) #用幾進位制轉換n就是幾 2 # 轉八進位制用oct(int(x,n)) #x位置放現有進位制字串 3 # 轉十進位制用int(x,n) 4 # 轉十六進位制用hex(int(x,n)) 十進位制轉二

常見物件_Integer轉換的操作

package cn.itcast_04; /* * 常用的基本進位制轉換: * public static String toBinaryString(int i) * public static String toOctalString(int i)

C++轉換

C/C++中的三種進位制 1.十進位制:dec 2.八進位制:oct 3.十六進位制:hex 程式如下: #include "iostream" using namespace std; int main() { int a,b,c; a = 10;//十

java轉換

返回一個整數引數是一個無符號整數的字串表示基礎2。 返回一個整數引數是一個無符號整數的字串表示基地16。 返回一個整數引數是一個無符號整數的字串表示基地8。 十進位制轉二進位制,十六進位制,八

石油新生第三次訓練賽 C題轉換(奇葩解)

題目描述 樂樂正在學進位制轉換,但他老是搞不清楚到底自己是否做對,請你編一程式實現兩種不同進位制之間的資料轉換,幫他檢驗。 輸入 共有三行,第一行是一個正整數,表示需要轉換的數的進位制n(2≤n≤16),第二行是一個n進位制數,若n>10則用大寫字母A~F表示數碼10~15

java轉換轉換函式

 進位制轉換原理     十進位制 轉 二進位制:     原理: 對十進位制數進行除 2 運算取餘。       6 --> 110   二進位制 轉 十進位制  原理: 二進位制 乘以 2 的n次冪 的過程       110 ->0*20 + 1*21 + 1 * 22        

android開發遇到的轉換,16資料流轉和字串的相互轉換

最近開發的程式是利用無線網路,收發資料,其中,接收和傳送的格式是16進位制位元組陣列 byte[],而顯示到介面中則不可能把一堆的位元組流顯示出來。因此,需要進行一下轉換。  直接說轉換的演算法吧        一、16進位制位元組陣列轉換成字串 核心的語句就一句getSt

python 轉換 整理

工作中經常需要用到進位制轉換, 一直對這方面有一些模糊, 終於有時間把這方面整理一下了. 常用的進位制: 二進位制bin(), 八進位制oct(), 十進位制int(), 十六進位制hex() 下面我採用python3.6中的原始碼進行解釋, 來自python中的builtins.py

java轉換,Byte與16轉換

字串轉換成十六進位制字串方法1: /** * 字串轉換成十六進位制字串 */ public static String str2HexStr(String str) { char[] chars = "0123456789ABCDEF".toChar

jsparseInt與parseFloat在轉換的區別

專案中需要轉換一個16進位制數0x00000000000000000000000000000000000000001c0bed842bda49e0fc480000,因為考慮到可能是一個小數,所以使用了parseFloat()方法,但是實際運用頻繁報錯. 深究原

Java 之間的轉換

進位制轉換的主要異常 Exception in thread "main" java.lang.NumberFormatException: For input string: "G8" at java.lang.NumberFormatException.forI

C16轉換成10函式

第一種情況:16進制中不含字母(a,b,c,d,e,f) long HexToDec(int nSource) { long nResult=0; int k=16;

java 十六轉換為字串,java GSON-JSON解析。

private void ceshi() { String data = "600000343555031374432354230307B22616464496E666F223A7B227265737" + "56C745F636F64652

Python內建轉換函式(實現16和ASCII轉換)

在進行wireshark抓包時你會發現底端視窗報文內容左邊是十六進位制數字,右邊是每兩個十六進位制轉換的ASCII字元,這裡使用Python程式碼實現一個十六進位制和ASCII的轉換方法。 hex() 轉換一個整數物件為十六進位制的字串 >>> hex(16) '0x10' >&

[程式設計題]轉換

寫出一個程式,接受一個十六進位制的數值字串,輸出該數值的十進位制字串。(多組同時輸入 )   輸入描述: 輸入一個十六進位制的數值字串。 輸出描述: 輸出該數值的十進位制字串。 輸入例子: 0xA 輸出例子: 10 package HWResear

轉換

  題目描述 以前我們做的進位制轉換大家都忽略了一點,就是進位制一定是正整數;今天這道進位制轉換就坑爹的選擇了,額,負整數來做進位制。 輸入 輸入由若干行組成,每行有兩個整數n(-32765<=n<=32767)和R(-16<=R<=-2)。輸入的最

轉換(c語言)

#include <stdio.h> #include <stdlib.h> void change(int n) { if (n == 0) return; else { // change(n / 8);

轉換以及原補反碼的轉換

進位制轉換以及原補反碼的轉換 進位制轉換 十進位制轉二進位制 十進位制數除2取餘法,即十進位制數除2,餘數為權位上的數,得到的商值繼續除2,依此步驟繼續向下運算直到商為0為止。 二進位制轉十進位制 把二進位制數按權展開、相加即得十進位制數。 二進位制與八進位制