Warum unterscheidet sich hex -> base64 so von base64 -> hex beim Packen und Entpacken?

Ich habe diesen Code zum Laufen gebracht, der von hex zu base64 konvertiert und umgekehrt. ich habeto_base64 von einer anderen SO-Frage, und ich schriebto_hex mit einigem Rätselraten und Ausprobieren.

class String

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

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

Aber ich habe das nicht wirklich befürchtetpack undunpack Methoden, auch nach dem Lesen der Dokumente. Insbesondere bin ich durch die Asymmetrie zwischen den beiden Implementierungen verwirrt. Konzeptionell nehmen wir in beiden Fällen einen String, der in einer Basis (16 oder 64) codiert ist, und möchten ihn in eine andere Basis konvertieren. Warum können wir das nicht umsetzen?to_hex so was:

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

oderto_base64 mitunpack? Warum ändert die Basis, die wir ausgewählt haben, die Methode, die wir zum Ausführen von Konvertierungen benötigen, vollständig?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage