【发布时间】:2010-09-10 05:02:35
【问题描述】:
是否有内置方法可以将 Ruby 中的整数转换为等效的十六进制?
类似String#to_i的反义词:
"0A".to_i(16) #=>10
也许喜欢:
"0A".hex #=>10
我知道如何自己动手,但使用内置的 Ruby 函数可能更有效。
【问题讨论】:
标签: ruby hex base-conversion
是否有内置方法可以将 Ruby 中的整数转换为等效的十六进制?
类似String#to_i的反义词:
"0A".to_i(16) #=>10
也许喜欢:
"0A".hex #=>10
我知道如何自己动手,但使用内置的 Ruby 函数可能更有效。
【问题讨论】:
标签: ruby hex base-conversion
你可以给to_s一个不是10的基数:
10.to_s(16) #=> "a"
请注意,在 ruby 2.4 中,FixNum 和 BigNum 统一在 Integer 类中。
如果您使用的是旧版 ruby,请查看 FixNum#to_s 和 BigNum#to_s 的文档
【讨论】:
【讨论】:
"#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a" - 花了我一点时间弄清楚如何发送几个 args。
[255, 0, 10].map{|x| '%02x'%x}.join
总结一下:
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"
【讨论】:
这是另一种方法:
sprintf("%02x", 10).upcase
在此处查看sprintf 的文档:http://www.ruby-doc.org/core/classes/Kernel.html#method-i-sprintf
【讨论】:
sprintf("%02X", 10) 将是大写的,因为 X 是大写的。不需要调用 upcase 方法。内核的具体部分是这样的:ruby-doc.org/core-1.9.3/Kernel.html#method-i-format
以防万一您对负数的格式有偏好:
p "%x" % -1 #=> "..f"
p -1.to_s(16) #=> "-1"
【讨论】: