2011-08-31 130 views

回答

5

您可以使用像脚本:

#!/bin/sh 
# hextorgb.sh 
hexinput=`echo $1 | tr '[:lower:]' '[:upper:]'` # uppercase-ing 
a=`echo $hexinput | cut -c-2` 
b=`echo $hexinput | cut -c3-4` 
c=`echo $hexinput | cut -c5-6` 

r=`echo "ibase=16; $a" | bc` 
g=`echo "ibase=16; $b" | bc` 
b=`echo "ibase=16; $c" | bc` 

echo $r $g $b 
exit 0 

,并用它喜欢:

./hextorgb.sh "11001A" 
导致输出像

17 0 26 

它可以通过测试参数等得到改善,但你想要做什么。

+0

关于'bc'的小记;十六进制输入数据*必须*为大写。否则它会咬你的屁股下线,当你给它'ff'这被解释为变量ff,它没有设置,所以它给你0. – plundra

+0

谢谢,我会改正这一点。我只想演示转换,脚本可以通过改进。 –

+0

为了让这个在我的机器上工作,我不得不将'$ 0'更改为'$ 1' –

6
$ cat hexrgb.sh 
#!/bin/bash 
hex="11001A" 
printf "%d %d %d\n" 0x${hex:0:2} 0x${hex:2:2} 0x${hex:4:2} 

$ ./hexrgb.sh 
17 0 26 

如果你不愿意使用bash的子串扩展,我还是用printf的转换。

+0

这更优雅。 –