十进制转换十六进制
时间: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]]
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]]
[[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]
输入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]
修改了一下,可以接收多个参数
#
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))
这句有问题,这样遇到能够被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]
((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]
(())常用于算术计算, 也可以用于对数值的比较
[[]]常用于表达式判断, 作用于[]相同, 但是[[]]比[]"强大" ^_^
我记得十三问里有讲吧~~
请问下 (( )) ; [[ ]]
什么时候用 和 ( ); [ ]
区别是什么 ??? [/quote]
(())常用于算术计算, 也可以用于对数值的比较
[[]]常用于表达式判断, 作用于[]相同, 但是[[]]比[]"强大" ^_^
我记得十三问里有讲吧~~
2007-12-2 22:52 无声无息
学习了,好好研究一下
2007-12-2 23:16 Edengundam
列火兄的帖子顶一下
2007-12-2 23:24 davistar
回复 #11 Edengundam 的帖子
顶
ps:ed兄有阵子没看到你了
顶
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]
列火兄的帖子顶一下 [/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进制吧
(())常用于算术计算, 也可以用于对数值的比较
[[]]常用于表达式判断, 作用于[]相同, 但是[[]]比[]"强大" ^_^
我记得十三问里有讲吧~~ [/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]]
用法:
./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]
强 学习了 算法不错 呵呵
进制互换:
用法:
./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]
进制间转换基本算法没啥大差别
恩 呵呵 谢谢
十三w里 [[]]没注意到 不过 看到其他的帖子了
恩学习了
烈火加油 来个 各个进制 转2进制吧 [/quote]
进制间转换基本算法没啥大差别
相关阅读 更多 +