• [20190930]oracle raw类型转化number脚本.txt


    [20190930]oracle raw类型转化number脚本.txt

    --//写一个简单oracle raw转化number脚本,简单说明:
    --//输入必须是c1,02 或者 c102,不支持c1,2格式。
    --//raw2num.sh 脚本放在最后.

    --//测试:
    $ cat otest.txt | xargs  -n 1 -I {}  bash -c "./raw2num.sh {};echo {} " | paste - -
    0       80
    1       c1,02
    2       c1,03
    25      c1,1a
    123     c2,02,18
    4100    c2,2a
    -4100   3d,3c,66
    41000000        c4,2a
    -41000000       3b,3c,66
    132004078       c5,02,21,01,29,4f
    2.01    c1,03,02
    .3      c0,1f
    .00000125       be,02,1a
    115.200003      c2,02,10,15,01,04
    -.00000125      41,64,4c,66
    -.3     3f,47,66
    -1      3e,64,66
    -5      3e,60,66
    -20032  3c,63,65,45,66
    -234.432        3d,63,43,3a,51,66
    999999999999999999999999999999999999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000  ff,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64
    -999999999999999999999999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02
    .0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001     80,02
    -.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001    7f,64,66
    123456789012345678901234567890123456789000      d5,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b
    -123456789012345678901234567890123456780000     2a,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b
    .123456789012345678901234567890123456789        c0,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b
    -.12345678901234567890123456789012345678        3f,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b


    $ cat otest.txt
    80
    c1,02
    c1,03
    c1,1a
    c2,02,18
    c2,2a
    3d,3c,66
    c4,2a
    3b,3c,66
    c5,02,21,01,29,4f
    c1,03,02
    c0,1f
    be,02,1a
    c2,02,10,15,01,04
    41,64,4c,66
    3f,47,66
    3e,64,66
    3e,60,66
    3c,63,65,45,66
    3d,63,43,3a,51,66
    ff,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64
    00,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02
    80,02
    7f,64,66
    d5,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b
    2a,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b
    c0,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b
    3f,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b


    $ cat raw2num.sh
    #! /bin/bash
    #! oracle raw convert number
    odebug=${ODEBUG:-0}

    # process input parameter ,delete 0x and "," and all spaces. save to variable v_raw. and its length to variable v_len.
    v_raw="$*"
    v_raw=${v_raw//0x/}
    v_raw=${v_raw//[, ]/}
    v_len=${#v_raw}

    v_tmp=$(( $v_len % 2 ))
    if [ $v_tmp -ne 0 -o $v_len -gt 42 ]; then
        echo "$v_raw is illegal! v_len=$v_len or length of v_len>42"
        exit 2
    fi

    if [ $odebug -eq 1 ] ; then
        echo v_ram="$v_raw"
    fi    

    if [ "$v_raw" == "80" ]; then
        result=0
        echo "$result"
        exit 0
    elif [ "$v_raw" > "80" ]; then
        v_res="0."
        v_exp=$(printf "%2d" $(( "0x"${v_raw:0:2} - 0xc0 )))

        if [ $odebug -eq 1 ] ; then
            echo v_ram="$v_raw" v_exp="$v_exp" v_len="$v_len"
        fi    

        for ((i=2;i<$v_len;i+=2))
        do
            v_tmp=$(printf "%02d" $(( "0x"${v_raw:i:2} -0x1 )))
            if [ $v_tmp -lt 0 -o $v_tmp -gt 99 ]; then
                echo "$v_raw is illegal! offset $i = 0x${v_raw:i:2}"
                exit 3
            fi
            if [ $v_tmp -eq 0 -a $i -eq $(( $v_len - 2 )) ];then
                echo "$v_raw is illegal! offset $i = 0x${v_raw:i:2}"
                exit 3
            fi
            v_res=${v_res}${v_tmp}
        done
        #result=$(echo "scale=132; 100^${v_exp} * ${v_res} " | bc -l | tr -d ' \ ' | sed -e "s/.([0-9]*[1-9])0+$/.1/" -e "s/.0+$//")
    else
    #negative
        v_res="-0."
        v_exp=$(printf "%2d" $(( 0xff - "0x"${v_raw:0:2} -0xc0 )))

        ## substr last 2 char, normal is 0x66 (102)
        v_len=$(( $v_len - 2 ))
        v_last=$(printf "%02d" $(( "0x"${v_raw:v_len:2} )))

        if [ $odebug -eq 1 ] ; then
            echo v_ram="$v_raw" v_exp="$v_exp" v_len-2="$v_len" v_last="$v_last"
        fi    
        
        if [ "$v_last" != "102" -a $v_len -lt 40  ]; then
            echo "$v_raw is illegal! offset $v_len = 0x${v_raw:v_len:2}"
            exit 4
        fi

        for ((i=2;i<$v_len;i+=2))
        do
            v_tmp=$(printf "%02d" $(( 0x65 - "0x"${v_raw:i:2} )))
            if [ $v_tmp -lt 0 -o $v_tmp -gt 99 ]; then
                echo "$v_raw is illegal! offset $i = 0x${v_raw:i:2}"
                exit 3
            fi
            if [ $v_tmp -eq 0 -a $i -eq $(( $v_len - 2 )) ];then
                echo "$v_raw is illegal! offset $i = 0x${v_raw:i:2}"
                exit 3
            fi
            v_res=${v_res}${v_tmp}
        done
        
        if [ $v_len -eq 42 -a "$v_last" != '102' ]; then
            v_tmp=$(printf "%02d" $(( 101 - $v_last )))
            if [ $v_tmp -le 0 -o $v_tmp -gt 99 ]; then
                echo "$v_raw is illegal! offset $v_len = 0x${v_raw:v_len:2}"
                exit 3
            fi
            v_res=${v_res}${v_last}
        fi        
        #result=$(echo "scale=132; 100^${v_exp} * ${v_res} " | bc -l | tr -d ' \ ' | sed -e "s/.([0-9]*[1-9])0+$/.1/" -e "s/.0+$//")
    fi

    if [ $odebug -eq 1 ] ; then
        echo v_ram="$v_raw" v_exp="$v_exp" v_len="$v_len" v_res="$v_res"
    fi    

    result=$(echo "scale=132; 100^${v_exp} * ${v_res} " | bc -l | tr -d ' \ ' | sed -e "s/.([0-9]*[1-9])0+$/.1/" -e "s/.0+$//")

    echo "$result"

  • 相关阅读:
    Beans
    HDU2830
    HDU1176
    rtc关机闹钟7 jni层 com_android_server_AlarmManagerService
    rtc关机闹钟6 AlarmManagerService研究
    rtc关机闹钟5 AlarmManager研究
    数论学习_裴蜀定理
    hdu-5465-二维BIT+nim
    hdu-1892-二维BIT
    hdu-2227-dp+bit
  • 原文地址:https://www.cnblogs.com/lfree/p/11623103.html
Copyright © 2020-2023  润新知