在Ruby中将整数转换为十六进制字符串


206

是否有将Ruby中的整数转换为其等效的十六进制的内置方法?

相反的东西String#to_i

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

也许:

"0A".hex #=>10

我知道如何自己动手,但是使用内置的Ruby函数可能更有效。

Answers:


325

您可以给出to_s10以外的基数:

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

请注意,在红宝石2.4 FixNumBigNum在被统一Integer类。如果您使用的是较旧的红宝石,请查看FixNum#to_sBigNum#的文档to_s


4
这就是我一直在寻找的答案,但未在链接的页面上进行记录。str.to_s => str被指定为不接受参数,并且具有“返回接收器”。作为唯一的文档,但它似乎有效
Matt Haughton

2
对那个复制粘贴错误的抱歉,当然to_s在字符串上没有参数,但是在Fixnum上它是:)
Jean

3
啊,我在Integer下寻找.to_s方法,但找不到。下次我也将在Fixnum下看待
Matt Haughton

1
确保原始编号是Fixnum的实例,Float将引发异常。
李李

88

如何使用%/ sprintf

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

15
感谢您展示此内容,我需要一些能让我以“ 0”开头的固定长度字符串的东西。例如:“%02X”%10#=>“ 0A”
亚伦·辛尼

42
对于其他红宝石新手:"#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"-花了我一些时间来弄清楚如何发送多个参数。
2011年

1
这是Ruby的一个很棒的片段!
OzBandit

4
@TomD%是一个String方法,可以有效地提供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


4

以防万一您偏爱如何设置负数的格式:

p "%x" % -1   #=> "..f"
p -1.to_s(16) #=> "-1"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.