文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>十进制转换十六进制

十进制转换十六进制

时间:2009-04-02  来源:sss0213

寂寞烈火
[小函数] 十进制转换十六进制

bash里可以把16进制的数字转换成10进制的, 像[b]echo $((16#AAA))[/b]这样的, 好像没有10进制到16进制的转换吧(不确定), 自己编了一个, 自当练习吧
[code]
#!/bin/bash
#
str=(0 1 2 3 4 5 6 7 8 9  A B C D E F)
dec=$1
Usage(){
        echo "Error!!!"
        exit 1
}

m=0
while ((m<${#dec}));do
        [[ ${dec:$m:1} = [0-9] ]] || Usage
        ((m++))
done

[[ $# -ne 1 || $1 == 0* ]] && Usage

array=($(
while ((dec!=0));do
        hex=$((dec%16))
        echo ${str[$hex]}
        dec=$((dec/16))
        done
))

k=$((${#array[@]}-1))
echo -n $dec\'s hexcode is:
while ((k>=0));do
        echo -n ${array[$k]}
        ((k--))
done
echo
[/code]
深深感谢[i]springwind426[/i] 兄的指点, 程序可以运行啦~~ [img]http://bbs.chinaunix.net/images/smilies/em03.gif[/img]

[[i] 本帖最后由 寂寞烈火 于 2007-12-2 12:37 编辑 [/i]]
2007-12-2 02:02 clyet
输入16,32,48。。。的时候没答案

[[i] 本帖最后由 clyet 于 2007-12-2 02:05 编辑 [/i]]
2007-12-2 02:10 寂寞烈火
[quote]原帖由 [i]clyet[/i] 于 2007-12-2 02:02 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7665172&ptid=1023421][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
输入16,32,48。。。的时候没答案 [/quote]
没错, 我发现啦, 困了, 明再说吧, [img]http://bbs.chinaunix.net/images/smilies/em14.gif[/img]
2007-12-2 11:21 springwind426
printf "%x" $var
2007-12-2 11:28 nuclearxin
请问下  ((   )) ;   [[     ]]  
什么时候用 和 (   );   [     ]   
区别是什么 ???
2007-12-2 12:05 springwind426
[code#!/bin/bash
#
str=(0 1 2 3 4 5 6 7 8 9  A B C D E F)
Usage(){
        echo "Error!!!"
        exit 1
}

[ $# -eq 0 ] && Usage

while [ $# -gt 0 ];do
        dec=$1
        if [[ -n "${dec//[0-9]}"  || $1 == 0* ]]; then
                echo "$dec is not a valid decimal number!!"
                shift
                continue
        fi

        array=($(
        while [ $dec -ne 0 ] ;do
                        hex=$((dec%16))
                        echo ${str[$hex]}
                        dec=$((dec/16))
        done
        ))

        echo -n $dec\'s hexcode is:
        k=$((${#array[@]}-1))
        while ((k>=0));do
                        echo -n ${array[$k]}
                        ((k--))
        done
        echo
        shift
done
echo 'Done!!'
[/code]

修改了一下,可以接收多个参数
2007-12-2 12:11 springwind426
((hex==0)) && break
这句有问题,这样遇到能够被16整除的数的时候就会异常中止

似乎应该写成 ((dec==0)) && break
而且应该放到  dec=$((dec/16)) 的后面

k=$((${#array[@]}-2))  似乎要写成  k=$((${#array[@]}-1))
2007-12-2 12:38 寂寞烈火
[quote]原帖由 [i]springwind426[/i] 于 2007-12-2 12:11 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7665601&ptid=1023421][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
((hex==0)) && break
这句有问题,这样遇到能够被16整除的数的时候就会异常中止

似乎应该写成 ((dec==0)) && break
而且应该放到  dec=$((dec/16)) 的后面

k=$((${#array[@]}-2))  似乎要写成  k=$((${ ... [/quote]
嗯, 昨晚有些犯晕, 脑子一团酱资啦~~ 多谢老兄指点!!!  [img]http://bbs.chinaunix.net/images/smilies/em09.gif[/img]
2007-12-2 12:44 寂寞烈火
[quote]原帖由 [i]nuclearxin[/i] 于 2007-12-2 11:28 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7665526&ptid=1023421][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
请问下  ((   )) ;   [[     ]]  
什么时候用 和 (   );   [     ]   
区别是什么 ??? [/quote]
(())常用于算术计算, 也可以用于对数值的比较
[[]]常用于表达式判断, 作用于[]相同, 但是[[]]比[]"强大" ^_^
我记得十三问里有讲吧~~
2007-12-2 22:52 无声无息
学习了,好好研究一下
2007-12-2 23:16 Edengundam
列火兄的帖子顶一下
2007-12-2 23:24 davistar
回复 #11 Edengundam 的帖子



ps:ed兄有阵子没看到你了
2007-12-2 23:27 寂寞烈火
[quote]原帖由 [i]Edengundam[/i] 于 2007-12-2 23:16 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7667037&ptid=1023421][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
列火兄的帖子顶一下 [/quote]
嘿嘿, 哪天找我, 喝酒去呀~~ [img]http://bbs.chinaunix.net/images/smilies/em18.gif[/img]
2007-12-2 23:37 nuclearxin
[quote]原帖由 [i]寂寞烈火[/i] 于 2007-12-2 12:44 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7665675&ptid=1023421][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

(())常用于算术计算, 也可以用于对数值的比较
[[]]常用于表达式判断, 作用于[]相同, 但是[[]]比[]"强大" ^_^
我记得十三问里有讲吧~~ [/quote]
恩 呵呵 谢谢
十三w里 [[]]没注意到  不过 看到其他的帖子了
恩学习了  
烈火加油 来个 各个进制 转2进制吧
2007-12-3 11:31 springwind426
进制互换:
用法:
./convert.sh  (进制)数[(要转换的进制)]  (进制)数[(要转换的进制)]  ...
其中,进制可以接收的参数是3-16  合理的数是"0123456789ABCDEF"
[code]
#!/bin/bash
[ $# -eq 0 ] && echo "Usage:$0 <(base)num1[(tobase)]> <(n)num2[(tobase)]> ...(tobase default 2)" && exit;
a1="0123456789ABCDEF"

while [ $# -gt 0 ];do
        read base num tobase<<<"${1//[()]/ }"
        if [ -n "${base//[0-9]}" -o \( $base -lt 3 -o $base -gt 16 \) ]; then
                echo "${1}: $base is not a valid base!!"
                shift
                continue
        fi
        [ -z "$tobase" ] && tobase=2
        if [ -n "${tobase//[0-9]}" -o \( $tobase -lt 1 -o $tobase -gt 16 \) ]; then
                echo "${1}: $tobase is not a valid base!!"
                shift
                continue
        fi
       
        num="$(echo $num | sed 'y/abcdef/ABCDEF/')"
        svalid=${a1:0:$base}
        if [ -n "${num//[$svalid]}" ];then
                echo "${1}: $num is not a valid base $base number!!"
                shift
                continue
        fi
        array=($(echo $num | sed 's/./& /g;s/A/10/g;s/B/11/g;s/C/12/g;s/D/13/g;s/E/14/g;s/F/15/g'))
        f=1
        n10=0
        for((i=${#array[*]}-1;i>=0;i--));do
                ((n10+=${array[$i]}*f))
                ((f *= $base))
        done
        echo -n "${1}: (10)$n10 ==>($tobase)"
        n2=""
        while [ $n10 -gt 0 ];do
                n2="${a1:$((n10%tobase)):1}$n2"
                ((n10/=tobase))
        done
        echo $n2
        shift
done
echo "Done!!"
[/code]

./convert.sh '(10)123(8)' '(8)1234(3)' '(16)abcde(8)'
(10)123(8): (10)123 ==>(8)173
(8)1234(3): (10)668 ==>(3)220202
(16)abcde(8): (10)703710 ==>(8)2536336
Done!!

[[i] 本帖最后由 springwind426 于 2007-12-3 12:33 编辑 [/i]]
2007-12-3 11:49 nuclearxin
[quote]原帖由 [i]springwind426[/i] 于 2007-12-3 11:31 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7668286&ptid=1023421][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
进制互换:
用法:
./convert.sh  (进制)数[(要转换的进制)]  (进制)数[(要转换的进制)]  ...
其中,进制可以接收的参数是3-16  合理的数是"0123456789ABCDEF"

#!/bin/bash
[ $# -eq 0 ] && echo "Usage ... [/quote]
强 学习了 算法不错 呵呵
2007-12-3 12:29 寂寞烈火
[quote]原帖由 [i]nuclearxin[/i] 于 2007-12-2 23:37 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7667083&ptid=1023421][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

恩 呵呵 谢谢
十三w里 [[]]没注意到  不过 看到其他的帖子了
恩学习了  
烈火加油 来个 各个进制 转2进制吧 [/quote]
进制间转换基本算法没啥大差别
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载