gpt4 book ai didi

ruby - 为什么 hex -> base64 与 base64 -> hex 使用 pack 和 unpack 如此不同?

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:54 30 4
gpt4 key购买 nike

我得到了这段代码,它从十六进制转换为 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

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

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

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

最佳答案

to_hexto_base64 的倒数:

to_base64

  1. 将字符串放入数组中:[self]
  2. H*调用包: [self].pack("H*")
  3. 将字符串放入数组中:[[self].pack("H*")]
  4. m0调用包: [[self].pack("H*")].pack("m0")

to_hex

  1. m0调用解包: self.unpack("m0")
  2. 从数组中提取字符串:self.unpack("m0").first
  3. H*调用解包: self.unpack("m0").first.unpack("H*")
  4. 从数组中提取字符串:self.unpack("m0").first.unpack("H*").first

这就是你撤销操作的方式,通过应用操作:

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

反之亦然:

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

a.packa.unpack 的倒数和 a.first[a] 的倒数

关于ruby - 为什么 hex -> base64 与 base64 -> hex 使用 pack 和 unpack 如此不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923515/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com