在 Ruby 中将整数转换为十六进制字符串
Posted
技术标签:
【中文标题】在 Ruby 中将整数转换为十六进制字符串【英文标题】:Converting an integer to a hexadecimal string in Ruby 【发布时间】:2010-09-10 05:02:35 【问题描述】:是否有内置方法可以将 Ruby 中的整数转换为等效的十六进制?
类似String#to_i
的反义词:
"0A".to_i(16) #=>10
也许喜欢:
"0A".hex #=>10
我知道如何自己动手,但使用内置的 Ruby 函数可能更有效。
【问题讨论】:
【参考方案1】:你可以给to_s
一个不是10的基数:
10.to_s(16) #=> "a"
请注意,在 ruby 2.4 中,FixNum
和 BigNum
统一在 Integer
类中。
如果您使用的是旧版 ruby,请查看 FixNum#to_s
和 BigNum#to_s
的文档
【讨论】:
这就是我一直在寻找的答案,但它没有记录在链接页面 str.to_s => str 被指定为不接受参数并且具有“返回接收器”。作为唯一的文档,但它似乎有效 抱歉,to_s 上的复制粘贴错误当然不带参数,但在 Fixnum 上却可以:) 啊,我在 Integer 下寻找 .to_s 方法,但找不到。下次我也会在 Fixnum 下查看 确保原来的数字是Fixnum的实例,Float会抛出异常。【参考方案2】:用%
/sprintf
怎么样:
i = 20
"%x" % i #=> "14"
【讨论】:
感谢您展示这一点,我需要一些东西,它可以让我得到一个带有“0”的固定长度字符串。例如:“%02X”% 10 #=>“0A” 对于其他 ruby 新手:"#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"
- 花了我一点时间弄清楚如何发送几个 args。
这是一个非常棒的 Ruby sn-p!
@TomD % 是一个 String 方法,它有效地提供了 sprintf 格式的简写(它们进行相同的内部调用)。它记录在 String 类中,请参阅ruby-doc.org/core-1.9.3/String.html#method-i-25
减少重复:[255, 0, 10].map|x| '%02x'%x.join
【参考方案3】:
总结一下:
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"
【讨论】:
感谢数字格式的数量。忘记了:) 拯救了我的一天。漂亮的 RGB 转换【参考方案4】:这是另一种方法:
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【参考方案5】:
以防万一您对负数的格式有偏好:
p "%x" % -1 #=> "..f"
p -1.to_s(16) #=> "-1"
【讨论】:
以上是关于在 Ruby 中将整数转换为十六进制字符串的主要内容,如果未能解决你的问题,请参考以下文章