作者:乐韵答题 | 2023-09-05 14:09
是否有内置的方法将Ruby中的整数转换为十六进制等效?
与之相反的是String#to_i
:
"0A".to_i(16) #=>10
或许像:
"0A".hex #=>10
我知道如何自己动手,但使用内置的Ruby函数效率可能更高.
1> Jean..:
你可以给to_s
10个以外的基数:
10.to_s(16) #=> "a"
这是我正在寻找的答案,但它没有在链接页面上记录str.to_s => str被指定为不接受参数并且具有"返回接收器".作为唯一的文件,但它似乎工作
啊,我在Integer下寻找一个.to_s方法,却找不到一个.我下次也会看看Fixnum
抱歉,复制粘贴错误当然to_s on string不接受参数,但在Fixnum上它确实:)
2> flxkid..:
怎么样使用%
/ sprintf
:
i = 20
"%x" % i #=> "14"
而对于那里的其他红宝石新手:"#%02x%02x%02x"%[255,0,10]#=>"#ff000a"` - 带我一点弄清楚如何发送几个args.
感谢您展示这一点,我需要的东西能让我得到一个前缀为'0'的固定长度字符串.例如:"%02X"%10#=>"0A"
@TomD%是一个String方法,它有效地提供了sprintf格式化的简写(它们进行相同的内部调用).它在String类中有记录,请参阅http://www.ruby-doc.org/core-1.9.3/String.html#method-i-25
减少重复:`[255,0,10] .map {| x | '%02X' %X} .join`
3> Lri..:
总结一下:
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"
4> Ultrasaurus..:
这是另一种方法:
sprintf("%02x", 10).upcase
请参阅sprintf
此处的文档:http://www.ruby-doc.org/core/classes/Kernel.html#method-i-sprintf
`sprintf("%02X",10)`因大写X而大写.不需要调用upcase方法.内核的具体部分是:http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-format