मुझे यकीन है कि किसी ने पहले ही इस समस्या को हल कर लिया है: हेक्स रंग मान (000000 से FFFFFF तक कुछ भी) को 0 से 255 तक 3 दशमलव मानों में बदलने का एक आसान और पोर्टेबल तरीका क्या है। (यदि आप रंगों से परिचित नहीं हैं पारंपरिक रूप से HTML में प्रतिनिधित्व किया जाता है, पहले दो हेक्स अंक पहले दशमलव संख्या होते हैं, और आगे भी।)

8
iconoclast 31 अगस्त 2011, 10:16

4 जवाब

$ 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

यदि आप सबस्ट्रिंग विस्तार के लिए बैश का उपयोग करने के इच्छुक नहीं हैं, तो भी मैं रूपांतरण के लिए प्रिंटफ का उपयोग करूंगा।

18
plundra 31 अगस्त 2011, 11:49
1
अधिक सुरुचिपूर्ण, यह।
 – 
Alex Hall
7 सितंबर 2016, 10:45

आप एक स्क्रिप्ट का उपयोग कर सकते हैं जैसे:

#!/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

तर्कों आदि के लिए परीक्षण करके इसे बेहतर बनाया जा सकता है, लेकिन यह वही करता है जो आप चाहते हैं।

7
Jonathan Leffler 3 अप्रैल 2017, 00:18
bc पर छोटा नोट; हेक्स इनपुट डेटा होना चाहिए अपरकेस होना चाहिए। वरना जब आप इसे ff देते हैं तो यह आपको गधे में काट देगा, जिसकी व्याख्या चर ff के रूप में की जाती है, जो सेट नहीं है इसलिए यह आपको 0 देता है।
 – 
plundra
31 अगस्त 2011, 11:52
धन्यवाद, मैं इसे ठीक कर दूंगा। मैं केवल परिवर्तन प्रदर्शित करना चाहता था, स्क्रिप्ट में सुधार किया जा सकता है।
 – 
Florin Ghita
31 अगस्त 2011, 11:58
इसे अपनी मशीन पर काम करने के लिए मुझे $0 को $1 में बदलना पड़ा
 – 
Cory Klein
21 सितंबर 2013, 02:57
#!/usr/bin/env bash

hex2rgb() {
    hex=$(echo "${1^^}" | sed 's/#//g')

    a=$(echo $hex | cut -c-2)
    b=$(echo $hex | cut -c3-4)
    c=$(echo $hex | cut -c5-6)

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

    echo ${1^^}
    echo $r $g $b
}

hex2rgb "#FF0000"
hex2rgb "#00FF00"
hex2rgb "#0000FF"
1
Rokin 26 अप्रैल 2019, 22:32
स्टैक ओवरफ्लो पर आपका स्वागत है, जबकि यह सही उत्तर हो सकता है, आपको इसे एक गुणवत्तापूर्ण उत्तर बनाने के लिए यहां जो कुछ किया गया है उसकी थोड़ी अंतर्दृष्टि/स्पष्टीकरण छोड़ना चाहिए जो दूसरों को समस्या के मूल कारण को समझने में मदद करेगा।
 – 
Greenonline
26 अप्रैल 2019, 22:51

मुझे पता है कि यह सवाल काफी पुराना है लेकिन एक किस्सा जोड़ना है;

वैकल्पिक रूप से, यदि आप आरजीबी को हेक्स में बदलना चाहते हैं तो आप कुछ ऐसा कर सकते हैं:

#!/bin/sh
# rgbtohex.sh
f="$1,"
focus=0
start=0
until [ "$limit" == "3" ]
  do
    focus=$((focus+1))
    if [ "${f:$focus:1}" == "," ]
    then
        limit=$((limit+1))
        length=$(($focus-$start))
        let c$limit="${f:start:length}"
        start=$((focus+1))
    fi
done
r=`echo "obase=16; $c1" | bc`
r2=`echo "obase=16; $c2" | bc`
r3=`echo "obase=16; $c3" | bc`
if [ "${r:1:2}" == "" ]
  then r=0$r
fi
if [ "${r2:1:2}" == "" ]
  then r2=0$r2
fi
if [ "${r3:1:2}" == "" ]
  then r3=0$r3
fi
echo $r$r2$r3
0
PixelBlurb 15 सितंबर 2020, 06:58