加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 为什么hex – > base64与base64 – > hex使用pack

发布时间:2020-12-17 04:24:48 所属栏目:百科 来源:网络整理
导读:我得到了这段代码,它从hex转换为base64,反之亦然.我从另一个SO问题得到了to_base64,并且我用一些猜测和反复试验写了to_hex. class String def to_base64 [[self].pack("H*")].pack("m0") end def to_hex self.unpack("m0").first.unpack("H*").first endend
我得到了这段代码,它从hex转换为base64,反之亦然.我从另一个SO问题得到了to_base64,并且我用一些猜测和反复试验写了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

但即使在阅读完文档后,我也没有真正理解包装和解压方法.具体来说,我对这两种实现之间的不对称感到困惑.从概念上讲,在这两种情况下,我们采用在某个基数(16或64)中编码的字符串,并且我们希望将其转换为另一个基数.那么为什么我们不能像这样实现to_hex:

def to_hex
  [[self].pack("m0")].pack("H*")
end

或者to_base64使用unpack?为什么我们选择的基础完全改变了我们需要用来完成转换的方法?

解决方法

to_hex与to_base64完全相反:

to_base64

>把字符串放在一个数组中:[self]
>使用H *调用包:[self] .pack(“H *”)
>将字符串放入数组:[[self] .pack(“H *”)]
>使用m0调用包:[[self] .pack(“H *”)].pack(“m0”)

to_hex

>使用m0调用unpack:self.unpack(“m0”)
>从数组中提取字符串:self.unpack(“m0”).first
>使用H *调用unpack:self.unpack(“m0”).first.unpack(“H *”)
>从数组中提取字符串:self.unpack(“m0”).first.unpack(“H *”).first

这就是你通过应用逆操作来撤消操作的方法:

a = 5
(a + 4) * 3
#=> 27

反过来说:

a = 27
(a / 3) - 4
#=> 5

a.pack是a.unpack的反转,a.first是[a]的反转

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读