การแปลงจำนวนเต็มเป็นสตริงเลขฐานสิบหกใน Ruby


206

มีวิธีในการแปลงจำนวนเต็มใน Ruby เป็นเลขฐานสิบหกเทียบเท่าหรือไม่

สิ่งที่ตรงกันข้ามString#to_i:

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

อาจจะชอบ:

"0A".hex #=>10

ฉันรู้วิธีหมุนตัวเอง แต่อาจมีประสิทธิภาพมากกว่าในการใช้ฟังก์ชัน Ruby ในตัว

คำตอบ:


325

คุณสามารถให้to_sฐานอื่นที่ไม่ใช่ 10:

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

โปรดทราบว่าในทับทิม 2.4 FixNumและBigNumเป็นปึกแผ่นในIntegerชั้นเรียน หากคุณใช้ทับทิมเก่าให้ตรวจสอบเอกสารของFixNum #to_sและ BigNum #to_s


4
นั่นคือคำตอบที่ฉันกำลังค้นหา แต่ไม่มีการระบุไว้ในหน้าที่เชื่อมโยง str.to_s => str ถูกระบุว่าไม่ยอมรับพารามิเตอร์และมี "ส่งคืนผู้รับ" เป็นเอกสารเพียงอย่างเดียว แต่ดูเหมือนว่าจะใช้งานได้
Matt Haughton

2
ขออภัยเกี่ยวกับที่วางสำเนาผิดพลาดของ to_s หลักสูตรเกี่ยวกับสตริงไม่ใช้ข้อโต้แย้ง แต่ใน Fixnum มันไม่ :)
ฌอง

3
อาฉันกำลังค้นหาวิธี. to_s ใน Integer และหาวิธีไม่พบ ฉันจะดูที่ Fixnum ในครั้งต่อไปเช่นกัน
Matt Haughton

1
ตรวจสอบให้แน่ใจว่าหมายเลขเดิมเป็นตัวอย่างของ Fixnum โดย Float จะทำการยกเว้น
lee

88

วิธีการเกี่ยวกับการใช้%/ sprintf:

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

15
ขอบคุณที่แสดงสิ่งนี้ฉันต้องการบางสิ่งที่จะทำให้ฉันมีสตริงความยาวคงที่ซึ่งต่อท้ายด้วย '0' เช่น: "% 02X"% 10 # => "0A"
Aaron Hinni

42
และสำหรับมือใหม่ทับทิมคนอื่น ๆ ที่นั่น: "#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"- พาฉันสักเล็กน้อยเพื่อค้นหาวิธีการส่ง args หลายอย่าง
Aneves

1
นี่เป็นตัวอย่างโค้ดของ Ruby ที่ยอดเยี่ยมมาก!
OzBandit

4
@TomD% เป็นวิธีการของสตริงที่ให้การจดชวเลขอย่างรวดเร็วสำหรับการจัดรูปแบบ sprintf (พวกเขาทำการโทรภายในเดียวกัน) มันถูกบันทึกไว้ในคลาส String ดูruby-doc.org/core-1.9.3/String.html#method-i-25
tardate

2
ความซ้ำซ้อนน้อยลง:[255, 0, 10].map{|x| '%02x'%x}.join
Rok Kralj

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 ที่ดี
Tim Kretschmer

14

นี่เป็นวิธีอื่น:

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

ดูเอกสารประกอบsprintfที่นี่: http://www.ruby-doc.org/core/classes/Kernel.html#method-i-sprintf


10
sprintf("%02X", 10)จะเป็นตัวพิมพ์ใหญ่เนื่องจากตัวพิมพ์ใหญ่ X ไม่จำเป็นต้องเรียกใช้วิธีการ upcase ส่วนเฉพาะของเคอร์เนลคือ: ruby-doc.org/core-1.9.3/Kernel.html#method-i-format
BookOfGreg

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.