在 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 中,FixNumBigNum 统一在 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 中将整数转换为十六进制字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 中将字符串或整数转换为二进制?

如何在 Objective C 中将十六进制数转换为整数和字符串?

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

如何在 Ruby 中将十进制值数组转换为 MAC 地址?

如何在 Android 中将颜色整数转换为十六进制字符串?

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