Por que razão hex -> base64 é tão diferente de base64 -> hex usando pack and unpack?

Eu tenho esse código funcionando, que converte de hex para base64 e vice-versa. Eu tenhoto_base64 de outra pergunta SO, e eu escrevito_hex com alguma adivinhação e tentativa e erro.

class String

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

  def to_hex
    self.unpack("m0").first.unpack("H*").first
  end
end

Mas eu não gosto muito dopack eunpack métodos, mesmo depois de ler os documentos. Especificamente, estou confuso com a assimetria entre as duas implementações. Conceitualmente, em ambos os casos, tomamos uma string codificada em alguma base (16 ou 64) e desejamos convertê-la em outra base. Então, por que não podemos implementarto_hex como isso:

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

outo_base64 usandounpack? Por que a base escolhida altera completamente o método que precisamos usar para realizar conversões?

questionAnswers(1)

yourAnswerToTheQuestion