Dlaczego hex -> base64 tak różni się od base64 -> hex za pomocą spakowania i rozpakowania?

Mam ten kod działający, który konwertuje z hex na base64 i odwrotnie. mamto_base64 z innego pytania SO i napisałemto_hex z pewnym zgadywaniem, próbą i błędem.

class String

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

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

Ale tak naprawdę nie mam pojęciapack iunpack metody, nawet po przeczytaniu dokumentów. W szczególności jestem zdezorientowany asymetrią między dwiema implementacjami. Koncepcyjnie, w obu przypadkach, bierzemy ciąg zakodowany w jakiejś bazie (16 lub 64) i chcemy go przekonwertować na inną bazę. Więc dlaczego nie możemy wdrożyćto_hex lubię to:

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

lubto_base64 za pomocąunpack? Dlaczego baza, którą wybraliśmy, całkowicie zmienia metodę, której potrzebujemy, aby uzyskać konwersje?

questionAnswers(1)

yourAnswerToTheQuestion