रूबी में एक हेक्साडेसिमल स्ट्रिंग के लिए एक पूर्णांक परिवर्तित करना


206

क्या रूबी में एक पूर्णांक को अपने हेक्साडेसिमल समकक्ष में बदलने के लिए बनाया गया है?

इसके विपरीत जैसा कुछ String#to_i:

"0A".to_i(16) #=>10

शायद पसंद:

"0A".hex #=>10

मुझे पता है कि मुझे कैसे रोल करना है, लेकिन रूबी फ़ंक्शन में निर्मित उपयोग करने के लिए यह संभवतः अधिक कुशल है।

जवाबों:


325

आप to_s10 के अलावा अन्य आधार दे सकते हैं :

10.to_s(16)  #=> "a"

ध्यान दें कि रूबी 2.4 में FixNumऔर कक्षा BigNumमें एकीकृत थे Integer। यदि आप पुराने माणिक का उपयोग कर रहे हैं तो FixNum #to_s और BigNum # के प्रलेखन की जाँच करेंto_s


4
यही वह उत्तर है जिसकी मैं तलाश कर रहा था लेकिन इसे लिंक किए गए पृष्ठ str.to_s => str पर दर्ज़ नहीं किया गया है क्योंकि इसे पैरामीटर स्वीकार नहीं किया गया है और इसमें "रिसीवर लौटाता है।" एकमात्र दस्तावेज के रूप में, लेकिन यह काम करने लगता है
मैट हैगटन

2
खेद है कि स्ट्रिंग पर पाठ्यक्रम की गलतियों की कॉपी पेस्ट to_s नहीं करता है लेकिन Fixnum पर यह करता है :)
जीन

3
आह, मैं एक .to_s विधि के लिए इंटेगर के तहत देख रहा था और एक नहीं पा सकता था। मैं अगली बार फिक्सेनम के तहत देखूंगा
मैट हैगटन

1
सुनिश्चित करें कि मूल संख्या Fixnum का एक उदाहरण है, फ्लोट अपवाद को फेंक देगा।
ली

88

कैसे उपयोग के बारे में %/ sprintf:

i = 20
"%x" % i  #=> "14"

15
यह दिखाने के लिए धन्यवाद, मुझे कुछ ऐसा चाहिए था जो मुझे '0' के साथ तय की गई एक निश्चित लंबाई की स्ट्रिंग मिले। ex: "% 02X"% 10 # => "0A"
हारून हिनि

42
और वहाँ बाहर अन्य रूबी newbies के लिए: "#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"- मुझे थोड़ा सा पता लगाने के लिए कि कैसे कई आर्गन भेजने के लिए लिया।
एवेस

1
यह रूबी का एक बहुत भयानक स्निपेट है!
ओजबंडिट

4
@ टॉम% एक स्ट्रिंग पद्धति है जो प्रभावी रूप से स्प्रिंटफ फॉर्मेटिंग के लिए एक शॉर्टहैंड प्रदान करती है (वे एक ही आंतरिक कॉल करते हैं)। यह स्ट्रिंग वर्ग में प्रलेखित है, रूबी- doc.org/core-1.9.3/String.html#method-i-25
टार्डेट करें

2
कम दोहराव:[255, 0, 10].map{|x| '%02x'%x}.join
रोक क्रज

78

संक्षेप में:

p 10.to_s(16) #=> "a"
p "%x" % 10 #=> "a"
p "%02X" % 10 #=> "0A"
p sprintf("%02X", 10) #=> "0A"
p "#%02X%02X%02X" % [255, 0, 10] #=> "#FF000A"

अंक स्वरूपण की संख्या के लिए धन्यवाद। उस बारे में भूल गए :)
onetwopunch

मेरा दिन बचाया। अच्छा RGB रूपांतरण
टिम Kretschmer

14

यहाँ एक और दृष्टिकोण है:

sprintf("%02x", 10).upcase

sprintfयहाँ के लिए दस्तावेज देखें : http://www.ruby-doc.org/core/classes/Kernel.html#method-i-sf


10
sprintf("%02X", 10)ऊपरी मामले की वजह से अपरकेस हो जाएगा। ऊपर कहे जाने वाले विधि की कोई आवश्यकता नहीं है। कर्नेल का विशिष्ट खंड यह है: ruby-doc.org/core-1.9.3/Kernel.html#method-i-format
BookOfGreg

4

यदि नकारात्मक संख्याओं को स्वरूपित किया जाता है तो बस आपके लिए प्राथमिकता है:

p "%x" % -1   #=> "..f"
p -1.to_s(16) #=> "-1"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.