2008-09-17 21 views
181

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

कुछ String#to_i के विपरीत की तरह:

"0A".to_i(16) #=>10 
शायद जैसा

:

"0A".hex #=>10 

मैं अपने खुद के रोल करने के लिए कैसे पता है, लेकिन यह शायद एक रूबी समारोह में बनाया का उपयोग करने के और अधिक कुशल है।

उत्तर

280

आप to_s 10 की तुलना में एक आधार अन्य दे सकते हैं:

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

के लिए दस्तावेज़ देखें:

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

यही वह उत्तर है जिसे मैं ढूंढ रहा था लेकिन यह दस्तावेज नहीं है लिंक पेज str.to_s => str पैरामीटर स्वीकार नहीं करने के रूप में निर्दिष्ट है और "रिसीवर देता है।" केवल प्रलेखन के रूप में है, लेकिन यह –

+0

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

+2

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

82

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

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

इस दिखाने के लिए धन्यवाद, मैं कुछ है कि मुझे एक निश्चित लंबाई मिलेगा जरूरत स्ट्रिंग '0' के साथ प्रीपेड। उदा: "% 02 एक्स"% 10 # => "0 ए" –

+37

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

+1

यह रूबी का एक बेहद शानदार स्निपेट है! – OzBandit

11

यहाँ एक और तरीका है sprintf यहां: http://www.ruby-doc.org/core/classes/Kernel.html#method-i-sprintf

+9

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

64

संक्षेप में:

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" 
+0

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

+0

मेरा दिन बचाया। अच्छा आरजीबी रूपांतरण –

2

शायद ज़रुरत पड़े है आप कैसे ऋणात्मक संख्याओं स्वरूपित हैं के लिए एक प्राथमिकता है:

p "%x" % -1 #=> "..f" 
p -1.to_s(16) #=> "-1"