shell文件转python shell类型转换

admin2024-06-04  9

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则分别是八进制和十六进制).

    1. #echo $((012)) #8进制,结果为10   
    2. #echo $((0xFF)) #16进制,结果为255   
    3. #echo $((0xEF))   
    4. #echo $((0xFFFF))   
    5. #echo $((2#1101011))   
    6. #echo $((2#11111111)) #2进制,结果为255   
    7. #echo $((8#255)) #8进制,结果为173   
    8. #echo $((8#377)) #16进制,结果为217   
    9. #echo $((16#D9))   
    10. #echo $((16#FF)) #有base不用0x,不然报错!8进制没问题!


    另外这个用法还可以扩展:

    $((base#number^base#Base1)) #可以理解为number和Base1这两者按照base进制做了个异或操作.

    比如:

    1. #base=1f  
    2. #Base1=ff  
    3. #echo $((16#$base^16#$Base1))   
    4. 224   
    5. #这个例子就表示,base(1f)和Base1(ff)按照16进制做了异或操作(结果为e0,即224)

    III: 例子:

    Question:

    现在想对两个二进制数据进行 或 运算, 如
    a= 1101
    b= 1000
    c= a|b
    以二进制格式输出c = 1101 ???

    Answer:

    1. [Bob@hzling08:~]-No.96-$ a=1101; b=1000  
    2. [Bob@hzling08:~]-No.97-$ d=`echo $(($((2#$a))|$((2#$b)))) | bc`   
    3. [Bob@hzling08:~]-No.98-$ echo "obase=2; $d" | bc                 
    4. 1101


    其实可以写成一句:

    1. [Bob@hzling08:~]-No.99-$ echo "obase=2;$(($((2#$a))|$((2#$b))))" | bc   
    2. 1101


    IV: 补充:

    1. 利用awk:


      1. #十六进制转十进制   
      2. echo 0x2A | gawk '=strtonum()'   
      3.   
      4. #科学计数法转十进制   
      5. printf "%f\n" 3.1188622400e+06   
      6. echo 3.1188622400e+06 | awk '{printf("%f\n",2.ksh中:)}'   
      7.   
      8. #科学计数法转十进制并保留两位小数   
      9. echo 3.1188622400e+06 | awk '{printf("%.2f\n",1. #ksh中的进制转换   
      2. num=42   
      3. typeset -i2 num   
      4. echo $num  
      5. typeset -i8 num   
      6. echo $num  
      7. typeset -i16 num   
      8. echo $num)}'   
      10.   
      11. #科学计数法转十进制并取整   
      12. printf "%.f\n" 3.1188622400e+06   
      13. echo 3.1188622400e+06 | awk '{printf("%d\n",

      V: 其他

      )}' 14. 15. #科学计数法转十进制并四舍五入取整 16. echo 3.1188622400e+06 | awk '{printf("%d\n",此外,dc也可以办到,+0.5)}'



        1. echo 255 16op|dc   
        2. FF


        ./hexconvert.sh 0xFF 255 vim hexconvert.sh

        使用方法:如:


        其它进制转为10进制
        八进制转十进制:


        下面是一个将输入的十六进制数值转换为10进制数:

        十六进制转十进制:

        shell文件转python shell类型转换,shell文件转python shell类型转换_shell文件转python,第1张

        实例参考实现:详见《Advanced Bash-Scripting Guide》高级Bash脚本编程指南12-46. 将10进制数字转换为16进制数字

            shell可以在不调用第3方命令,表示不同进制数据。这里总结以下表示方法。shell 脚本默认数值是由10 进制数处理,除非这个数字某种特殊的标记法或前缀开头. 才可以表示其它进制类型数值。如:以 0 开头就是 8 进制.以0x 开头就是16 进制数.使用 BASE#NUMBER 这种形式可以表示其它进制.BASE值:2-64.

         

        base-32转十进制:

        • base64转十进制:

        二进制转十进制

        [chengmo@centos5 ~]$ ((num=0123));
        [chengmo@centos5 ~]$ echo $num;
        83

        [chengmo@centos5 ~]$ ((num=8#123));
        [chengmo@centos5 ~]$ echo $num;    
        83

        ((表达式)),(())里面可以是任意数据表达式。如果前面加入:”$”可以读取计算结果。

        十进制转为其它进制

        [chengmo@centos5 ~]$ ((num=0xff)); 
        [chengmo@centos5 ~]$ echo $num;    
        255
        [chengmo@centos5 ~]$ ((num=16#ff));
        [chengmo@centos5 ~]$ echo $num;    
        255

        十进制转八进制

        [chengmo@centos5 ~]$ ((num=32#ffff));
        [chengmo@centos5 ~]$ echo $num;      
        507375

        [chengmo@centos5 ~]$ ((num=64#abc_)); 
        [chengmo@centos5 ~]$ echo $num;       
        2667327

        [chengmo@centos5 ~]$ ((num=2#11111111));  
        [chengmo@centos5 ~]$ echo $num;
        255

         

        这里使用到:bc外部命令完成。bc命令格式转换为:echo "obase=进制;值"|bc

        [chengmo@centos5 ~]$ echo "obase=8;01234567"|bc
        4553207

        二进制,十六进制,base64转换为 十进制也相同方法。

        [chengmo@centos5 ~]$ echo "obase=64;123456"|bc  
        30 09 00

         

        shell,内置各种进制表示方法非常简单。记得base#number 即可。这里记得赋值时候用(())符号。不能直接用=号了。=号没有值类型。默认将后面变成字符串了。如:

        [chengmo@centos5 ~]$ num=0123;
        [chengmo@centos5 ~]$ echo $num;
        0123

        0开头已经失去了意义了。

        可以通过定义符:let达到(()) 运算效果。

        [chengmo@centos5 ~]$ let num=0123;
        [chengmo@centos5 ~]$ 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


        本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!