【发布时间】:2014-10-28 10:09:03
【问题描述】:
有没有更好的方法以十六进制显示数字,前导0?我试过了:
i.to_s(16)
但是
2.to_s(16) #=> "2"
我期望"02"。我试过打印格式:
"%02x" % i
适用于2,但是
"%02x" % 256 #=> "100"
我想要"0100"。所以我想出了这个:
class Integer
def to_hex_string
("%0x" % self).size % 2 == 0 ? "%0x" % self : "%0#{("%0x" % self).size+1}x" % self
end
end
有效:
2.to_hex_string #=> "02"
256.to_hex_string #=> "0100"
它也适用于 Bignumber 类,但看起来很奇怪,这么简单的请求需要这样的技巧。有更好的主意吗?
【问题讨论】:
-
如果您只想在数字前面加一个零,请尝试
"0#{i.to_s(16)}"或"0%x" % i。但这通常表示一个八进制数。常见的十六进制前缀是0x,可以使用"%#x" % i打印。 -
感谢您的评论,但似乎 to_s(16) 被 BigNumber 窃听
标签: ruby hex hexdump leading-zero