我得到了这段代码,它从十六进制转换为base64,反之亦然。我是to_base64
从另一个 SO question 中得到的,我写to_hex
了一些猜测和反复试验。
class String
def to_base64
[[self].pack("H*")].pack("m0")
end
def to_hex
self.unpack("m0").first.unpack("H*").first
end
end
但即使在阅读文档之后,我也并不真正了解pack
and方法。unpack
具体来说,我对这两种实现之间的不对称感到困惑。从概念上讲,在这两种情况下,我们都采用以某个基数(16 或 64)编码的字符串,并且我们希望将其转换为另一个基数。那么为什么我们不能这样实现to_hex
:
def to_hex
[[self].pack("m0")].pack("H*")
end
或to_base64
使用unpack
?为什么我们选择的基础完全改变了我们完成转换所需的方法?