2008-09-17 72 views
181

Có cách nào được xây dựng để chuyển đổi một số nguyên trong Ruby thành số thập lục phân của nó không?Chuyển đổi một số nguyên thành chuỗi thập lục phân trong Ruby

Something như trái ngược với String#to_i:

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

Giống như lẽ:

"0A".hex #=>10 

tôi biết làm thế nào để cuộn của riêng tôi, nhưng đây có thể hiệu quả hơn để sử dụng một xây dựng trong chức năng Ruby.

Trả lời

280

Bạn có thể cung cấp cho to_s cơ sở khác hơn 10:

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

Đó là câu trả lời tôi đang tìm kiếm nhưng nó không được ghi trên trang được liên kết str.to_s => str được chỉ định là không chấp nhận tham số và có "Trả về người nhận". là tài liệu duy nhất, nhưng có vẻ như làm việc –

+0

xin lỗi về lỗi sao chép dán tất nhiên to_s trên chuỗi không có đối số nhưng trên Fixnum nó không :) – Jean

+2

Ah, tôi đã tìm kiếm theo Integer cho một phương pháp .to_s và cann không tìm thấy. Tôi sẽ xem xét dưới Fixnum thời gian tới cũng –

82

Làm thế nào về việc sử dụng %/sprintf:

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

Cám ơn hiển thị này, tôi cần cái gì đó sẽ làm cho tôi một chiều dài cố định chuỗi được thêm vào với '0'. ví dụ: "% 02X"% 10 # => "0A" –

+37

Và đối với những người mới sử dụng ruby ​​khác: '" #% 02x% 02x% 02x "% [255, 0, 10] # =>" # ff000a " - đã cho tôi một chút để tìm ra cách để gửi một số args. – ANeves

+1

Đây là một đoạn mã cực kỳ tuyệt vời của Ruby! – OzBandit

64

Để tóm tắt:

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

Cảm ơn số định dạng chữ số. Quên về điều đó :) – onetwopunch

+0

đã lưu ngày của tôi. chuyển đổi RGB đẹp –

2

Chỉ trong trường hợp bạn có một sở thích cho cách số âm được định dạng:

p "%x" % -1 #=> "..f" 
p -1.to_s(16) #=> "-1" 
Các vấn đề liên quan