Chuyển đổi một số nguyên thành một chuỗi thập lục phân trong Ruby


206

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

Một cái gì đó giống như đối lập với String#to_i:

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

Giống như có lẽ:

"0A".hex #=>10

Tôi biết cách tự cuộn, nhưng có lẽ hiệu quả hơn khi sử dụng chức năng Ruby tích hợp.

Câu trả lời:


325

Bạn có thể cung cấp to_smột cơ sở khác hơn 10:

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

Lưu ý rằng trong ruby ​​2.4 FixNumBigNumđã được thống nhất trong Integerlớp. Nếu bạn đang sử dụng một viên ruby ​​cũ hơn, hãy kiểm tra tài liệu của FixNum #to_sBigNum #to_s


4
Đó là câu trả lời tôi đang tìm kiếm nhưng nó không được ghi lại 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 nó dường như hoạt động
Matt Haughton

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

3
À, tôi đang tìm kiếm theo Integer cho phương thức .to_s và không thể tìm thấy. Tôi cũng sẽ xem bên dưới Fixnum vào lần tới
Matt Haughton

1
Đảm bảo số gốc là một ví dụ của Fixnum, Float sẽ đưa ra một ngoại lệ.
lee

88

Cách sử dụng %/ sprintf:

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

15
Cảm ơn vì đã cho thấy điều này, tôi cần một cái gì đó sẽ giúp tôi có một chuỗi có độ dài cố định được thêm vào '0'. ví dụ: "% 02X"% 10 # => "0A"
Aaron Hinni

42
Và đối với những người mới chơi ruby ​​ngoài kia: "#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"- tôi đã mất một chút để tìm ra cách gửi một vài đối số.
ANeves

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

4
@TomD% là một phương thức Chuỗi cung cấp hiệu quả tốc ký cho định dạng chạy nước rút (chúng thực hiện các cuộc gọi nội bộ giống nhau). Nó được ghi lại trong lớp String, xem ruby-doc.org/core-1.9.3/String.html#method-i-25
tardate

2
Ít trùng lặp:[255, 0, 10].map{|x| '%02x'%x}.join
Rok Kralj

78

Để 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"

Cảm ơn số lượng định dạng chữ số. Quên về :) rằng
onetwopunch

đã cứu ngày của tôi. chuyển đổi RGB đẹp
Tim Kretschmer


4

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

p "%x" % -1   #=> "..f"
p -1.to_s(16) #=> "-1"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.