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

Mat*_*ton 204 ruby hex base-conversion

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

与之相反的是String#to_i:

"0A".to_i(16) #=>10
Run Code Online (Sandbox Code Playgroud)

或许像:

"0A".hex #=>10
Run Code Online (Sandbox Code Playgroud)

我知道如何自己动手,但使用内置的Ruby函数效率可能更高.

Jea*_*ean 317

你可以给to_s10个以外的基数:

10.to_s(16)  #=> "a"
Run Code Online (Sandbox Code Playgroud)

  • 这是我正在寻找的答案,但它没有在链接页面上记录str.to_s => str被指定为不接受参数并且具有"返回接收器".作为唯一的文件,但它似乎工作 (4认同)
  • 啊,我在Integer下寻找一个.to_s方法,却找不到一个.我下次也会看看Fixnum (3认同)
  • 抱歉,复制粘贴错误当然to_s on string不接受参数,但在Fixnum上它确实:) (2认同)

flx*_*kid 88

怎么样使用%/ sprintf:

i = 20
"%x" % i  #=> "14"
Run Code Online (Sandbox Code Playgroud)

  • 而对于那里的其他红宝石新手:"#%02x%02x%02x"%[255,0,10]#=>"#ff000a"` - 带我一点弄清楚如何发送几个args. (42认同)
  • 感谢您展示这一点,我需要的东西能让我得到一个前缀为'0'的固定长度字符串.例如:"%02X"%10#=>"0A" (15认同)
  • @TomD%是一个String方法,它有效地提供了sprintf格式化的简写(它们进行相同的内部调用).它在String类中有记录,请参阅http://www.ruby-doc.org/core-1.9.3/String.html#method-i-25 (4认同)
  • 减少重复:`[255,0,10] .map {| x | '%02X' %X} .join` (2认同)

Lri*_*Lri 74

总结一下:

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"
Run Code Online (Sandbox Code Playgroud)


Ult*_*rus 14

这是另一种方法:

sprintf("%02x", 10).upcase
Run Code Online (Sandbox Code Playgroud)

请参阅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 (9认同)

小智 6

以防万一您对负数的格式有偏好:

p "%x" % -1   #=> "..f"
p -1.to_s(16) #=> "-1"
Run Code Online (Sandbox Code Playgroud)