在UNIX shell脚本中将十六进制颜色转换为十进制RGB值
问题描述:
我确定有人已经解决了这个问题:什么是将十六进制颜色值(从000000到FFFFFF的任何值)转换为3个十进制值的简单方便的方法0到255(如果你不熟悉如何颜色在传统的HTML代表,前两个十六进制数字是第一个十进制数,等等。)在UNIX shell脚本中将十六进制颜色转换为十进制RGB值
答
您可以使用像脚本:
#!/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
它可以通过测试参数等得到改善,但你想要做什么。
答
$ 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
这更优雅。 –
关于'bc'的小记;十六进制输入数据*必须*为大写。否则它会咬你的屁股下线,当你给它'ff'这被解释为变量ff,它没有设置,所以它给你0. – plundra
谢谢,我会改正这一点。我只想演示转换,脚本可以通过改进。 –
为了让这个在我的机器上工作,我不得不将'$ 0'更改为'$ 1' –